Start · Sprachen · PHP · Referenz · xmlwriter_write_raw

xmlwriter_write_raw

Funktion

Schreibt rohen, unveränderten XML-Inhalt direkt in den XMLWriter-Puffer, ohne jegliche Escaping-Verarbeitung.

seit PHP 5.1.2 Kategorie: xml

Signatur

xmlwriter_write_raw(XMLWriter $writer, string $content): bool

Beschreibung

xmlwriter_write_raw() fügt den übergebenen String-Inhalt unverändert in den aktuellen XML-Ausgabe-Puffer ein. Im Gegensatz zu Funktionen wie xmlwriter_write_element() oder xmlwriter_text() werden Sonderzeichen wie <, > oder & nicht automatisch escapet. Dies ermöglicht das direkte Einbetten von bereits gültigem XML-Markup.

Typische Anwendungsfälle sind das Einfügen von vorformatiertem XML, CDATA-Abschnitten, Verarbeitungsanweisungen oder das Zusammenführen von XML-Fragmenten aus verschiedenen Quellen, die bereits wohlgeformt sind und nicht nochmals bearbeitet werden sollen.

Die Funktion kann sowohl prozedural (mit dem XMLWriter-Ressource- bzw. Objekt-Parameter) als auch objektorientiert über $writer->writeRaw($content) verwendet werden. Beide Varianten liefern dasselbe Verhalten.

Da kein Escaping stattfindet, liegt die Verantwortung für die Wohlgeformtheit des eingebetteten Inhalts vollständig beim Entwickler. Ungültiges oder schlecht geformtes XML kann das gesamte Dokument beschädigen.

Parameter

Name Typ Default Beschreibung
$writer Pflicht XMLWriter Die XMLWriter-Instanz, in deren Puffer der rohe Inhalt geschrieben wird.
$content Pflicht string Der rohe XML-Inhalt, der unverändert und ohne Escaping in den Ausgabe-Puffer eingefügt wird.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. wenn kein gültiger Writer übergeben wurde).

Beispiele

Einfügen eines vorformatierten XML-Fragments

<?php
$writer = new XMLWriter();
$writer->openMemory();
$writer->startDocument('1.0', 'UTF-8');
$writer->startElement('root');

// Rohes, bereits gültiges XML-Fragment direkt einfügen
$writer->writeRaw('<child id="1"><name>Max Mustermann</name></child>');

$writer->endElement();
$writer->endDocument();

echo $writer->outputMemory();
<?xml version="1.0" encoding="UTF-8"?> <root><child id="1"><name>Max Mustermann</name></child></root>

Kombination mit CDATA-ähnlichem Inhalt und normalen Elementen

<?php
$writer = new XMLWriter();
$writer->openMemory();
$writer->startDocument('1.0', 'UTF-8');
$writer->startElement('feed');

// Normales Element
$writer->writeElement('title', 'Mein Blog');

// Rohes XML-Fragment mit vorberechneter Struktur
$rawEntry = '<entry><id>42</id><content>Hallo &amp; Willkommen</content></entry>';
$writer->writeRaw($rawEntry);

$writer->endElement();
$writer->endDocument();

echo $writer->outputMemory();
<?xml version="1.0" encoding="UTF-8"?> <feed><title>Mein Blog</title><entry><id>42</id><content>Hallo &amp; Willkommen</content></entry></feed>

// Wichtig · Fallstricke

Sicherheitshinweis: Da xmlwriter_write_raw() keinerlei Escaping durchführt, dürfen niemals ungeprüfte Benutzereingaben direkt übergeben werden. Nicht validierter Inhalt kann zu XML-Injection führen, bei dem ein Angreifer die Struktur des Dokuments manipulieren oder ungültiges XML erzeugen kann.

Wenn der übergebene Inhalt nicht wohlgeformt ist (z. B. nicht geschlossene Tags), entsteht ein ungültiges XML-Dokument. Das Parsen oder Weiterverarbeiten dieses Dokuments schlägt dann fehl. Es empfiehlt sich daher, eingebettete Fragmente vorab mit einem XML-Parser wie DOMDocument::loadXML() zu validieren.

Im objektorientierten Stil steht die Methode als XMLWriter::writeRaw(string $content): bool zur Verfügung und verhält sich identisch zur prozeduralen Variante.