Encodieren einer SVG Datei für das `src`-Attribut mit PHP
PHPTutorialimageSVGWeil SVGs besser nicht base64 encodiert sein soll wenn Sie als <img />
-tag src
-attribute gesetzt werden sollen, ist die vorgeschlagene Alternative die URL-Codierung.
Die Standard PHP urlencode
Leider ist es nicht für diese Aufgabe geeignet, da der resultierende Wert von keinem Browser als gültiges SVG-Bild interpretiert wird.
Stattdessen muss die Funktion rawurlencode
verwendet werden.
Ich habe einige Zeit gebraucht, um das zu realisieren.
Sobald Sie dies verstanden haben, können Sie auch einige andere Optimierungen übernehmen.
Vielleicht lassen sie sich inspirieren von Taylor Hunts mini-svg-uri um einige Zeichen manuell zu dekodieren, um die Gesamtgröße zu verbessern.
Eine abschließende Funktion könnte beispielsweise so aussehen:
function svgUrlEncode($svgPath) {
// einlesen der Datei
$data = \file_get_contents($svgPath);
// encodieren von ersten Charakteren
$data = \preg_replace('/\v(?:[\v\h]+)/', ' ', $data);
$data = \str_replace('"', "'", $data);
$data = \rawurlencode($data);
// zurück-decodieren gewisser Charakter, die von Browsern verstanden werden,
// um die Kompressierung zu verbessern
$data = \str_replace('%20', ' ', $data);
$data = \str_replace('%3D', '=', $data);
$data = \str_replace('%3A', ':', $data);
$data = \str_replace('%2F', '/', $data);
return $data;
}