Encodieren einer SVG Datei für das `src`-Attribut mit PHP

Tim Bernhard

PHPTutorialimageSVG

Dieser Beitrag ist etwas älter. Meinungen, Daten und Codes könnten veraltet sein.

Helfen Sie mit, allfällige Fehler zu korrigieren: GitHub

Weil 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;
}
Webmentions

Keine Kommentare vorhanden für diese Seite.