Signatur
Beschreibung
Dom\CDATASection ist Teil der modernen, namespaced DOM-Erweiterung (PHP 8.4+) und repräsentiert einen CDATA-Abschnitt in einem XML-Dokument. CDATA-Abschnitte ermöglichen das Einbetten von beliebigem Text – einschließlich Zeichen wie <, > und & – ohne dass diese XML-kodiert werden müssen. Der Parser behandelt alles innerhalb von <![CDATA[...]]> als reinen Textinhalt.
Dom\CDATASection erbt von Dom\Text und damit auch von Dom\CharacterData und Dom\Node. Neue Instanzen werden nicht direkt über new erstellt, sondern über die Methode Dom\Document::createCDATASection() erzeugt und anschließend mit appendChild() oder insertBefore() in den Dokumentbaum eingefügt.
CDATA-Abschnitte sind ausschließlich in XML-Dokumenten gültig – in HTML5 werden sie nicht unterstützt und sollten daher nur in Kombination mit Dom\XMLDocument verwendet werden. Typische Anwendungsfälle sind das Einbetten von JavaScript oder CSS in XML-basierten Formaten wie SVG oder XSLT, ohne Sonderzeichen escapen zu müssen.
- Zugriff auf den Textinhalt über die geerbte Eigenschaft
data. - Manipulation über geerbte Methoden wie
appendData(),insertData(),deleteData()undreplaceData(). - Die Zeichenkette
]]>darf innerhalb eines CDATA-Abschnitts nicht vorkommen, da sie den Abschnitt vorzeitig schließt.
Beispiele
CDATA-Abschnitt in ein XML-Dokument einfügen
<?php
$doc = Dom\XMLDocument::createEmpty();
$root = $doc->createElement('root');
$doc->appendChild($root);
$cdata = $doc->createCDATASection('<Hallo> & "Welt"');
$root->appendChild($cdata);
echo $doc->saveXML();
CDATA-Inhalt auslesen und verändern
<?php
$xmlString = '<?xml version="1.0"?><script><![CDATA[if (a < b && b > 0) { alert(1); }]]></script>';
$doc = Dom\XMLDocument::createFromString($xmlString);
$scriptNode = $doc->getElementsByTagName('script')->item(0);
$cdataNode = $scriptNode->firstChild;
if ($cdataNode instanceof Dom\CDATASection) {
echo 'Typ: CDATASection' . PHP_EOL;
echo 'Inhalt: ' . $cdataNode->data . PHP_EOL;
// Inhalt ersetzen
$cdataNode->data = 'console.log("Ersetzt");';
echo $doc->saveXML();
}
// Wichtig · Fallstricke
Nur für XML: CDATA-Abschnitte sind kein gültiges HTML5-Konstrukt. Verwende Dom\CDATASection ausschließlich mit Dom\XMLDocument, niemals mit Dom\HTMLDocument.
Verbotene Zeichenfolge: Die Sequenz ]]> darf nicht im Inhalt eines CDATA-Abschnitts vorkommen, da sie den Abschnitt vorzeitig schließt und zu einem Parsing-Fehler führt. PHP prüft dies nicht automatisch – es liegt in der Verantwortung des Entwicklers, solche Eingaben zu validieren oder aufzuteilen.
Klasse vs. Legacy-API: Diese Klasse gehört zur modernen Dom\-Namespace-API (PHP 8.4+). Die ältere DOMCdataSection-Klasse aus der ext/dom-Erweiterung bleibt weiterhin verfügbar, ist aber nicht identisch.