EDIT: Do not use this! I tested it more and realized that the A-> C conversion is not reliable in all cases, and also some other combinations of path commands fail. Use here !
It finally worked in Safari, Opera, IE9, Firefox and Chrome: http://jsfiddle.net/timo2012/M6Bhh/41/
The function normalizes the SVG path data, so that all segments of the path are converted to M, C, L, and z (= absolute coordinates, which means that all relative coordinates are converted to absolute). All other segments are trivial and 100% accurate, but arc (A) is a special case, and you can choose whether arcs are converted to rows (L), quadratic curves (Q) or cubic curves (C). The most accurate are the lines, but then we lose independence from the resolution. For some reason, squares fail in certain arcs, but the cubes are more accurate.
If we have the following path:
<svg width="400" height="400"> <path stroke="red" stroke-width="3" d="M30 30 S40 23 23 42 L23,42 C113.333,113.333 136.667,113.333 150,80 t40,50 T230,240 q20 20 54 20 s40 23 23 42 t20,30 a20,30 0,0,1 -50,-50"/> </svg>
and normalize it using:
var path = document.querySelector('path'); path.normalizePath(3, 0.1);
The normalized version is as follows:
<svg width="400" height="400"> <path stroke="red" stroke-width="3" d="M 30 30 C 30 30 40 23 23 42 L 23 42 C 113.333 113.333 136.667 113.333 150 80 C 150 80 163.333 96.6667 190 130 C 216.667 163.333 230 200 230 240 C 243.333 253.333 261.333 260 284 260 C 284 260 324 283 307 302 C 307 302 313.667 312 327 332 C 324.811 336.924 321.997 341.154 318.719 344.448 C 315.441 347.741 311.762 350.033 307.893 351.194 C 304.024 352.355 300.04 352.361 296.169 351.213 C 292.298 350.064 288.616 347.783 285.333 344.5 C 282.05 341.217 279.23 336.996 277.035 332.078 C 274.839 327.161 273.311 321.642 272.537 315.839 C 271.763 310.035 271.759 304.06 272.525 298.254 C 273.291 292.448 274.811 286.924 277 282"/> </svg>
If we lay out the result on each other, this is the result (red is normalized, and black is the original):

Other features:
path.normalizePath(1,0.5);
And what are the advantages of this?
Own path to normalize the path data has not yet been implemented in all browsers, so we are on our own for now. And when our own path is implemented, we are not sure that all browsers do this the same way. SVG documentation talks about converting arcs to strings, but this is not very good, because the main advantage of SVG: permission independence - will be lost. We must fully control how the normalization of arcs is performed, and this script provides a way for it.
When data is normalized, it can be changed in the same way as the coordinates in bitmap images. If we want to deform the paths (Arc, Arch, Bulge, Shell, Flag, Wave, Fish, Rise, Fisheye, Inflate, Squeeze, Twist) in the Illustrator path or distort the paths to reach the illusion perspective, the normalized path data can be changed reliably.
The code is based on the YannickBochatay script , and I made it a more cross-browser.