Signatur
Beschreibung
xmlwriter_end_cdata() schreibt die schließende Sequenz ]]> eines CDATA-Abschnitts in den XML-Ausgabepuffer. CDATA-Abschnitte ermöglichen es, beliebigen Textinhalt – einschließlich Sonderzeichen wie <, > und & – ohne Maskierung in XML-Dokumente einzubetten.
Die Funktion muss immer nach xmlwriter_start_cdata() und dem Schreiben des eigentlichen Inhalts mit xmlwriter_text() aufgerufen werden, um den Block korrekt zu schließen. Ein nicht geschlossener CDATA-Block führt zu ungültigem XML.
Typische Anwendungsfälle sind das Einbetten von HTML-Fragmenten, JavaScript-Code oder anderen Inhalten, die zahlreiche Zeichen enthalten, die in XML normalerweise maskiert werden müssten. Durch CDATA wird der Inhalt als Rohtext behandelt und vom XML-Parser nicht interpretiert.
Ab PHP 8.0 wird statt einer XMLWriter-Ressource ein XMLWriter-Objekt verwendet. In der objektorientierten Schreibweise steht die Methode als XMLWriter::endCdata() zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $writer Pflicht | XMLWriter | Die XMLWriter-Instanz, auf der der CDATA-Block geschlossen werden soll. Wurde zuvor mit xmlwriter_open_memory() oder xmlwriter_open_uri() erstellt. |
Rückgabewert
true bei Erfolg zurück, oder false bei einem Fehler – beispielsweise wenn kein CDATA-Block geöffnet war.Beispiele
HTML-Fragment in CDATA einbetten
<?php
$writer = xmlwriter_open_memory();
xmlwriter_set_indent($writer, true);
xmlwriter_start_document($writer, '1.0', 'UTF-8');
xmlwriter_start_element($writer, 'content');
xmlwriter_start_cdata($writer);
xmlwriter_text($writer, '<p>Das ist <strong>HTML</strong> & mehr!</p>');
xmlwriter_end_cdata($writer);
xmlwriter_end_element($writer);
xmlwriter_end_document($writer);
echo xmlwriter_output_memory($writer);
Objektorientierte Schreibweise mit XMLWriter
<?php
$writer = new XMLWriter();
$writer->openMemory();
$writer->setIndent(true);
$writer->startDocument('1.0', 'UTF-8');
$writer->startElement('script');
$writer->startCdata();
$writer->text('if (a < b && b > 0) { alert("Hallo"); }');
$writer->endCdata();
$writer->endElement();
$writer->endDocument();
echo $writer->outputMemory();
// Wichtig · Fallstricke
Achtung: Die Zeichenfolge ]]> darf nicht innerhalb des CDATA-Inhalts vorkommen, da sie den Block vorzeitig beenden würde. Solche Inhalte müssen aufgeteilt oder anderweitig behandelt werden.
Wird xmlwriter_end_cdata() aufgerufen, ohne dass zuvor xmlwriter_start_cdata() aufgerufen wurde, gibt die Funktion false zurück und das Dokument kann ungültig werden. Immer auf korrekte Verschachtelung der Start-/End-Aufrufe achten.