Aktueller Standort: Startseite> Neueste Artikel> Welche spezielle Verarbeitung sollte darauf geachtet werden, wenn SVG -Dateien mithilfe der Funktion Simplexml_Load_String analysiert werden?

Welche spezielle Verarbeitung sollte darauf geachtet werden, wenn SVG -Dateien mithilfe der Funktion Simplexml_Load_String analysiert werden?

M66 2025-06-23

1. Die besondere Natur der SVG -Dateistruktur

Als XML-basiertes Dateiformat enthalten SVG-Dateien normalerweise Beschreibungen von Grafiken wie Pfaden, Linien, Rechtecken, Kreisen usw. Die Struktur unterscheidet sich nicht wesentlich von der einer normalen XML-Datei, aber der Namespace und die Elementeigenschaften können zusätzliche Aufmerksamkeit erfordern.

1.1 Namespace -Probleme

SVG -Dateien verwenden normalerweise den Namespace, was bedeutet, dass Elemente in der Datei möglicherweise bestimmte Präfixe haben. Zum Beispiel hat das <Svg> -Element normalerweise die folgende Namespace -Deklaration:

 <img class="max-h-96 w-full" src="data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20...%3D%22%22%3E%0A%3C%2Fsvg%3E">

Wenn Sie SimplexML_Load_String direkt verwenden, um eine solche Datei zu analysieren, berücksichtigen SimplexML -Objekte. Wenn Sie also auf Elemente zugreifen, müssen Sie sich möglicherweise mit diesen Namespaces befassen.

 <span><span><span class="hljs-variable">$xml</span></span><span> = </span><span><span class="hljs-title function_ invoke__">simplexml_load_string</span></span><span>(</span><span><span class="hljs-variable">$svg_string</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$xml</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getName</span></span><span>();  </span><span><span class="hljs-comment">// Ausgabe: {http://www.w3.org/2000/svg}svg</span></span><span>
</span></span>

In diesem Fall müssen wir den Elementnamen mit dem Namespace verwenden, um auf den entsprechenden Inhalt zuzugreifen. Zum Beispiel:

 <span><span><span class="hljs-variable">$namespaced_svg</span></span><span> = </span><span><span class="hljs-variable">$xml</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">children</span></span><span>(</span><span><span class="hljs-string">'http://www.w3.org/2000/svg'</span></span><span>);
</span></span>

1.2 Namespaces in Eigenschaften mit dem Handhabung der Eigenschaften

Zusätzlich zum Element selbst können bestimmte Eigenschaften in der SVG -Datei (z. B. XLink: HREF ) auch Namespaces enthalten. Daher ist auch besondere Aufmerksamkeit erforderlich, wenn Sie auf diese Eigenschaften zugreifen.

 <span><span><span class="hljs-variable">$link</span></span><span> = </span><span><span class="hljs-variable">$element</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">attributes</span></span><span>(</span><span><span class="hljs-string">'http://www.w3.org/1999/xlink'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$link</span></span><span>[</span><span><span class="hljs-string">'href'</span></span><span>];  </span><span><span class="hljs-comment">// Ausgabe对应的属性值</span></span><span>
</span></span>

2. Textinhalt in der SVG -Datei

SVG enthält nicht nur grafische Beschreibungen, sondern auch Text (z. B. <text> Elemente). Bei der Analyse von SVG extrahiert Simplexml die Textknoten automatisch in normale Zeichenfolgen. Einige SVG -Textinhalte können jedoch Formatierungsprobleme wie Zeilenpausen, Räume usw. enthalten. Diese Details können während der Parsen ignoriert oder nicht ordnungsgemäß verarbeitet werden.

2.1 Textinhalt zugreifen

Wenn Sie auf ein <text -Element zugreifen, können Sie den Textinhalt wie ein normales XML -Element extrahieren:

 <span><span><span class="hljs-variable">$textElement</span></span><span> = </span><span><span class="hljs-variable">$xml</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">xpath</span></span><span>(</span><span><span class="hljs-string">'//svg:text'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$textElement</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>];  </span><span><span class="hljs-comment">// Ausgabe文本内容</span></span><span>
</span></span>

Es ist jedoch zu beachten, dass Simplexml_Load_String möglicherweise nicht wie erwartet zurückgibt, wenn der Text im <text> Element mehrere untergeordnete Elemente oder komplexe verschachtelte Strukturen enthält.


3. Behandeln Sie SVG -Ereignisse und Skripte

Einige SVG -Dateien können JavaScript -Skripte oder Ereignishandler (wie Onclick , Onload usw.) enthalten, die normalerweise zur Definition von Interaktionen oder Animationen verwendet werden. Bei der Analyse analysiert Simplexml_Load_String diese Skriptteile nicht, aber Probleme können auftreten, wenn sie direkt gelesen und verarbeitet werden.

3.1 Ignorieren Sie JavaScript -Skripte

Wenn Sie sich nicht mit JavaScript -Teilen in SVG befassen müssen, können Sie diese Skript -Teile durch einfache reguläre Ausdrücke oder String -Operationen löschen oder herausfiltern.

 <span><span><span class="hljs-variable">$clean_svg</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/&lt;script[^&gt;]*&gt;.*?&lt;\/script&gt;/is'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-variable">$svg_string</span></span><span>);
</span><span><span class="hljs-variable">$xml</span></span><span> = </span><span><span class="hljs-title function_ invoke__">simplexml_load_string</span></span><span>(</span><span><span class="hljs-variable">$clean_svg</span></span><span>);
</span></span>

Auf diese Weise können wir sicherstellen, dass SimpXML nur reine SVG -Diagrammdaten verarbeitet, ohne vom Skript -Teil gestört zu werden.


4. Verarbeitung von Sonderzeichen und Entitäten

SVG -Dateien enthalten möglicherweise einige Sonderzeichen wie & , < , > usw. Diese Zeichen haben spezifische Bedeutungen in XML -Dateien und müssen möglicherweise entkommen. PHP analysiert diese Zeichen automatisch bei der Verwendung von Simplexml_Load_String , aber in einigen Fällen ist es weiterhin erforderlich, diese Zeichen manuell zu verarbeiten.

4.1 Fluchtzeichen

Wenn der SVG -Inhalt spezielle Zeichen enthält, die nicht entkommen sind, kann dies beim direkten Laden an Parsenfehler verursachen. Stellen Sie sicher, dass alle Sonderzeichen in der SVG -Datei ordnungsgemäß entkommen oder codiert sind.

 <span><span><span class="hljs-variable">$escaped_svg</span></span><span> = </span><span><span class="hljs-title function_ invoke__">htmlspecialchars</span></span><span>(</span><span><span class="hljs-variable">$svg_string</span></span><span>);
</span><span><span class="hljs-variable">$xml</span></span><span> = </span><span><span class="hljs-title function_ invoke__">simplexml_load_string</span></span><span>(</span><span><span class="hljs-variable">$escaped_svg</span></span><span>);
</span></span>

5. Leistung großer Dateien in SVG analysieren

SVG -Dateien können sehr groß sein, insbesondere wenn sie komplexe Grafiken oder große Datenmengen enthalten. Beim Laden großer SVG -Dateien mit SimplexML_Load_String kann dies zu Leistungspflichtigen oder Speicherüberlaufproblemen führen. Um mit dieser Art von Problem umzugehen, können Sie in Betracht ziehen, wenn Sie ein Chunked -Lesen in Betracht ziehen oder andere Methoden verwenden, um die Speicherverwendung zu optimieren.

5.1 Die Leistung mithilfe der LiBXML -Bibliothek optimieren

Die LIBXML -Bibliothek von PHP bietet viele Optimierungsoptionen. Durch die Konfiguration von libxml_use_internal_errors und anderen Parametern können Sie die unnötige Fehlerbehebung und den Speicherverbrauch während der Parsen reduzieren.

 <span><span><span class="hljs-title function_ invoke__">libxml_use_internal_errors</span></span><span>(</span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-variable">$xml</span></span><span> = </span><span><span class="hljs-title function_ invoke__">simplexml_load_string</span></span><span>(</span><span><span class="hljs-variable">$svg_string</span></span><span>);
</span></span>