So dekodieren Sie Base64 in SVG
- Fügen Sie das Base64 ein, eine URI
data:image/svg+xml;base64,...oder das CSS oder HTML, das sie enthält. URL-kodierte SVG-Data-URIs (data:image/svg+xml,%3Csvg...) funktionieren ebenfalls. - Die Vorschau zeichnet die Grafik und nennt ihre Abmessungen, oder „skalierbar“, wenn der Browser keine feste Größe meldet. Darunter steht der vollständige XML-Quelltext.
- Drücken Sie Datei herunterladen, um eine
.svgzu speichern, oder markieren Sie das Markup im Quelltextfeld, um es zu kopieren.
SVG ist reiner Text, das Dekodieren liefert also lesbares Markup. Neben dem Speichern der Datei finden Sie so heraus, was ein Icon in einem Stylesheet tatsächlich zeichnet, welche Farben es nutzt oder warum es nicht dargestellt wird.
SVG-Sicherheit: Bildvorschau und Inline-Markup
Eine SVG-Datei ist ein Dokument. Sie kann <script>-Elemente enthalten, Event-Attribute wie onload, Links, über <foreignObject> eingebettetes HTML und Verweise auf externe Bilder und Schriften. Was ein Browser damit macht, hängt davon ab, wie das SVG geladen wird:
| Wie das SVG verwendet wird | Skripte laufen | Externe Ressourcen werden geladen |
|---|---|---|
<img src="...">, CSS-background-image, die Vorschau dieser Seite | nein | nein |
Inline-<svg> in HTML oder per innerHTML eingefügt | ja | ja |
Direkt in einem Tab geöffnet oder in <object>, <embed>, <iframe> | ja | ja |
Diese Seite dekodiert die Bytes und übergibt sie einem <img> als data:image/svg+xml;base64,...; was auch immer die Datei enthält, sie wird nur gezeichnet. Das Quelltextfeld zeigt den Text, ohne ihn zu interpretieren.
Wollen Sie das SVG inline in eine Seite einbauen, lesen Sie zuerst den Quelltext und achten Sie auf:
<script>-Elemente und Attribute, die mitonbeginnen, etwaonloadoderonclickjavascript:inhrefoderxlink:href<foreignObject>, das beliebiges HTML tragen kannhref-Werte, die aufhttp://- oderhttps://-Adressen zeigen und sich für Tracking nutzen lassen<!ENTITY-Deklarationen, die manche serverseitigen XML-Parser gefährlich expandieren
Base64 verbirgt all das vor einem flüchtigen Blick, und deshalb kommt ein bösartiges SVG oft kodiert an. Base64 selbst schützt nichts; siehe Kodierung und Verschlüsselung.
Wie SVG erkannt wird
Die meisten SVG-Dateien beginnen mit <svg oder mit einer XML-Deklaration, ihr Base64 beginnt daher mit PHN2Zy oder PD94bWwg. Ein vorangestelltes UTF-8-Byte-Order-Mark fügt 77u/ hinzu, wie in 77u/PHN2Zy....
Das Tool behandelt die Daten als SVG, wenn das Tag <svg das erste Element ist, nachdem eine XML-Deklaration, Kommentare und eine Zeile <!DOCTYPE svg ...> übersprungen wurden, alles innerhalb der ersten 2 KB. Bei einer Data-URI, die image/svg+xml angibt, wird der angegebene Typ in jedem Fall verwendet. Ist ein SVG in etwas anderes eingebettet, etwa eine HTML-Seite, oder schiebt ein sehr langer Kommentar das Tag über 2 KB hinaus, erhalten Sie den Hinweis „Erkannt: Text, erwartet: SVG.“; tragen Sie image/svg+xml in MIME-Typ ein, um es darzustellen.
Wenn das SVG nicht dargestellt wird
- „Dieses SVG konnte nicht dargestellt werden“. Das XML ist fehlerhaft: ein nicht geschlossenes Tag, ein nicht maskiertes
&oder eine abgeschnittene Zeichenkette, der das schließende</svg>fehlt. Sehen Sie sich zuerst das Ende des Quelltexts an. - Hier wird es dargestellt, aber nicht auf Ihrer Website. Prüfen Sie, wie die Website es ausliefert. Bei einer Data-URI muss der Typ
image/svg+xmlsein; eine alstext/plainoderapplication/octet-streamausgelieferte Datei wird ebenfalls nicht als Bild dargestellt. - Inline funktioniert es, als Data-URI nicht. Dem Wurzelelement fehlt
xmlns="http://www.w3.org/2000/svg". Inline-SVG in HTML braucht es nicht, Bilder schon. - Die Farben stimmen nicht. Ein als Bild verwendetes SVG kann weder
currentColornoch CSS von der Seite erben. Es wird mit den Farben gezeichnet, die die Datei definiert, standardmäßig Schwarz.
Das dekodierte SVG im Code verwenden
Im Browser zeigen Sie ein Base64-SVG am sichersten an, indem es ein Bild bleibt:
const img = new Image();
img.src = "data:image/svg+xml;base64," + b64;
document.body.append(img);
Schreiben Sie stattdessen element.innerHTML = atob(b64), landet das Markup in Ihrer Seite, wo seine Skripte und Event-Handler mit den Rechten Ihrer Seite laufen. Beachten Sie außerdem, dass atob() Bytes als Latin-1-Zeichen zurückgibt, was Nicht-ASCII-Text im SVG kaputt macht; Base64 in JavaScript zeigt, wie Sie UTF-8 korrekt dekodieren. Um ein SVG zu kodieren, nutzen Sie SVG in Base64.
Häufige Fragen
Ist es sicher, ein SVG aus unbekannter Quelle zu öffnen?
Als Bild ja: Browser führen bei SVGs, die über <img> oder CSS angezeigt werden, keine Skripte aus und laden keine externen Dateien, und genau so zeigt diese Seite die Vorschau. Direkt in einem Tab geöffnet oder inline in HTML eingefügt, kann dieselbe Datei JavaScript ausführen; lesen Sie also zuerst den Quelltext.
Warum sagt die Seite, mein SVG sehe wie Text aus?
Der Text beginnt nach einer eventuellen XML-Deklaration, Kommentaren und <!DOCTYPE> nicht mit einem <svg>-Tag, zum Beispiel weil er in HTML eingebettet ist. Tragen Sie image/svg+xml in MIME-Typ ein, dann schaltet die Vorschau auf den SVG-Renderer um.
Was bedeutet hier eine Base64-Zeichenkette, die mit H4sI beginnt?
Das sind gzip-komprimierte Daten, typischerweise eine .svgz-Datei. Die Seite weist darauf hin; drücken Sie Erneut dekodieren, um sie zu entpacken und das reine SVG-Markup zu erhalten.
Kann ich das SVG bearbeiten und wieder in Base64 verwandeln?
Kopieren Sie das Markup aus dem Quelltextfeld, bearbeiten Sie es und fügen Sie es in SVG in Data-URI ein. Das Tool erzeugt Base64- und URL-kodierte Versionen und vergleicht ihre Größen.