Signatur
Beschreibung
xmlwriter_write_cdata() fügt einen kompletten CDATA-Abschnitt in das XML-Dokument ein, das über den übergebenen XMLWriter aufgebaut wird. Ein CDATA-Abschnitt hat die Form <![CDATA[...]]> und ermöglicht es, beliebigen Text einzubetten, ohne dass darin enthaltene Sonderzeichen wie <, > oder & einzeln maskiert werden müssen.
Diese Funktion ist die prozedurale Entsprechung der objektorientierten Methode XMLWriter::writeCdata(). Sie kombiniert intern die drei Schritte StartCdata, Text und EndCdata in einem einzigen Aufruf und ist damit die bequemste Variante, wenn der gesamte Inhalt des CDATA-Blocks bereits als String vorliegt.
CDATA-Abschnitte eignen sich besonders für eingebetteten HTML-Code, JavaScript oder andere Inhalte, die XML-Sonderzeichen enthalten können, aber unverändert an den XML-Parser-Konsumenten weitergegeben werden sollen. Innerhalb eines CDATA-Abschnitts darf jedoch die Zeichenkette ]]> nicht vorkommen, da sie den Abschnitt vorzeitig beendet.
Seit PHP 8.0 wird XMLWriter als eigener Typhinweis unterstützt; in früheren Versionen wurde stattdessen eine resource übergeben.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $writer Pflicht | XMLWriter | Das XMLWriter-Objekt (bzw. vor PHP 8.0 die entsprechende resource), in dessen Ausgabestrom der CDATA-Block geschrieben wird. |
|
| $content Pflicht | string | Der Textinhalt des CDATA-Abschnitts. Darf keine Zeichenfolge ]]> enthalten, da diese den Abschnitt vorzeitig beendet. |
Rückgabewert
true zurück, wenn der CDATA-Block erfolgreich geschrieben wurde, andernfalls false.Beispiele
Eingebetteten HTML-Code als CDATA in XML schreiben
<?php
$writer = new XMLWriter();
$writer->openMemory();
$writer->startDocument('1.0', 'UTF-8');
$writer->startElement('description');
// HTML-Inhalt mit Sonderzeichen direkt als CDATA einbetten
xmlwriter_write_cdata($writer, '<p>Dies ist <strong>fett</strong> & kursiv.</p>');
$writer->endElement();
$writer->endDocument();
echo $writer->outputMemory();
RSS-Feed mit CDATA-gesichertem Artikel-Inhalt erzeugen
<?php
$writer = new XMLWriter();
$writer->openMemory();
$writer->startDocument('1.0', 'UTF-8');
$writer->startElement('rss');
$writer->writeAttribute('version', '2.0');
$writer->startElement('channel');
$writer->startElement('item');
$writer->writeElement('title', 'Mein Artikel');
// Artikeltext kann beliebige HTML-/Sonderzeichen enthalten
$articleHtml = '<p>Preis: 5 < 10 € – <a href="http://example.com">mehr</a></p>';
$writer->startElement('description');
xmlwriter_write_cdata($writer, $articleHtml);
$writer->endElement(); // description
$writer->endElement(); // item
$writer->endElement(); // channel
$writer->endElement(); // rss
$writer->endDocument();
echo $writer->outputMemory();
// Wichtig · Fallstricke
Achtung: Der Inhalt des CDATA-Abschnitts darf die Zeichenkette ]]> nicht enthalten, da sie den Abschnitt vorzeitig schließt. PHP prüft dies nicht automatisch — prüfen Sie den Eingabe-String ggf. selbst mit str_contains($content, ']]>') und splitten Sie den Block notfalls auf.
Die Funktion xmlwriter_write_cdata() ist äquivalent zur Sequenz aus xmlwriter_start_cdata(), xmlwriter_text() und xmlwriter_end_cdata(). Wenn nur ein Teil des Inhalts in einen CDATA-Block gehört oder der Inhalt schrittweise aufgebaut wird, sind die separaten Funktionen flexibler.
Ab PHP 8.0 wurde die resource-basierte API durch eine echte XMLWriter-Klasse ersetzt. Die prozedurale Funktion funktioniert weiterhin, nimmt aber nun ein XMLWriter-Objekt entgegen.