4
\$\begingroup\$

I wrote something to "compress" svg files. The svg files I am using often have comments and empty <g> 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('/<g>[\n\r\s]*<\/g>/', '', $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;
}
  1. Do you see any dangers here, perhaps this could ruin some svg files?
  2. Is there something I could do to compress the file even more?
  3. Is there any way to speed this up?
asked Apr 13, 2017 at 8:13
\$\endgroup\$
1
  • 1
    \$\begingroup\$ You code does not account for multiline comments (for eg: hastebin.com/idetufocat.xml) \$\endgroup\$ Commented Apr 22, 2017 at 5:53

1 Answer 1

5
\$\begingroup\$

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.

answered Apr 13, 2017 at 12:48
\$\endgroup\$

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.