HiveBrain v1.2.0
Get Started
← Back to all entries
patternphpMinor

Compress svg files in PHP

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
phpsvgfilescompress

Problem

I wrote something to "compress" svg files. The svg files I am using often have comments and empty `` tags, and I want to remove them. My main goal is not the speed of the compression, but the size of the compressed svg file.

Here is an example svg file: https://image.flaticon.com/icons/svg/222/222436.svg

And here is the code I am using:

public function compress($svg)
{
    $svg = preg_replace('//', '', $svg);
    $svg = preg_replace('/[\n\r\s]*/', '', $svg);
    $svg = preg_replace('/\n/', ' ', $svg);
    $svg = preg_replace('/\t/', ' ', $svg);
    $svg = preg_replace('/\s\s+/', ' ', $svg);
    $svg = str_replace('> <', $svg);
    $svg = str_replace(';"', '"', $svg);

    return $svg;
}


  • Do you see any dangers here, perhaps this could ruin some svg files?



  • Is there something I could do to compress the file even more?



  • Is there any way to speed this up?

Solution

SVG is structured data and should therefore not require regex to work with it. I would suggest that you work with either an XML or SVG-specific library in PHP which would let you parse in the input SVG, remove any unwanted nodes and then render it back out.

Here is a starting point for common PHP tools for working with XML that should be able to do what you want.

This also looks like a library that could meet your needs.

Context

StackExchange Code Review Q#160625, answer score: 4

Revisions (0)

No revisions yet.