Start · Sprachen · PHP · Referenz · xmlwriter_end_cdata

xmlwriter_end_cdata

Funktion

Beendet einen zuvor mit <code>xmlwriter_start_cdata()</code> geöffneten CDATA-Block im XML-Dokument.

seit PHP 5.1.2 Kategorie: xml

Signatur

xmlwriter_end_cdata(XMLWriter $writer): bool

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

Typ
bool
Beschreibung
Gibt 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);
<?xml version="1.0" encoding="UTF-8"?> <content><![CDATA[<p>Das ist <strong>HTML</strong> & mehr!</p>]]></content>

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();
<?xml version="1.0" encoding="UTF-8"?> <script><![CDATA[if (a < b && b > 0) { alert("Hallo"); }]]></script>

// 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.