Start · Sprachen · PHP · Referenz · Dom\Comment

Dom\Comment

Klasse

Repräsentiert einen XML/HTML-Kommentarknoten (<code>&lt;!-- ... --&gt;</code>) in einem DOM-Dokument.

seit PHP 8.4.0 Kategorie: xml

Signatur

class Dom\Comment extends Dom\CharacterData

Beschreibung

Dom\Comment ist Teil der modernen, typensicheren DOM-Erweiterung (Namespace Dom\), die in PHP 8.4 eingeführt wurde. Sie modelliert Kommentarknoten — also Inhalte der Form <!-- Kommentar --> — innerhalb eines XML- oder HTML-Dokuments und entspricht der gleichnamigen Klasse im W3C-DOM-Standard.

Die Klasse erbt von Dom\CharacterData und stellt damit alle Methoden zur Manipulation von Zeichendaten bereit, wie appendData(), deleteData(), insertData(), replaceData() und substringData(). Über Dom\Node stehen außerdem alle allgemeinen Knotenoperationen (Einfügen, Entfernen, Traversieren) zur Verfügung.

Kommentarknoten können programmatisch über Dom\Document::createComment() erzeugt und anschließend mit appendChild() oder insertBefore() in den Dokumentbaum eingefügt werden. Sie sind beispielsweise nützlich, um während der XML/HTML-Generierung Metainformationen, Lizenz-Header oder Trennmarkierungen als Kommentar einzubetten.

Hinweis: Dom\Comment ist nicht zu verwechseln mit der älteren DOMComment-Klasse der klassischen ext/dom-Erweiterung. Beide repräsentieren dasselbe DOM-Konzept, gehören jedoch zu verschiedenen API-Generationen; die neue Dom\-API ist strenger typisiert und wirft Ausnahmen statt Warnungen auszugeben.

Beispiele

Kommentarknoten erstellen und in ein Dokument einfügen

<?php
$doc = Dom\XMLDocument::createEmpty();
$root = $doc->createElement('root');
$doc->appendChild($root);

// Kommentarknoten erzeugen
$comment = $doc->createComment(' Generiert am ' . date('Y-m-d') . ' ');
$root->appendChild($comment);

$element = $doc->createElement('item');
$element->textContent = 'Hallo Welt';
$root->appendChild($element);

echo $doc->saveXml();
<?xml version="1.0"?> <root><!-- Generiert am 2024-06-01 --><item>Hallo Welt</item></root>

Kommentarinhalt lesen und verändern

<?php
$doc = Dom\XMLDocument::createFromString(
    '<?xml version="1.0"?><root><!-- Alter Kommentar --></root>'
);

$root = $doc->documentElement;

foreach ($root->childNodes as $node) {
    if ($node instanceof Dom\Comment) {
        echo 'Gefundener Kommentar: ' . $node->data . PHP_EOL;

        // Kommentartext ersetzen
        $node->data = ' Neuer Kommentar ';
    }
}

echo $doc->saveXml();
Gefundener Kommentar: Alter Kommentar <?xml version="1.0"?> <root><!-- Neuer Kommentar --></root>

// Wichtig · Fallstricke

Doppelte Bindestriche im Kommentarinhalt: Laut XML-Spezifikation darf die Zeichenfolge -- innerhalb eines Kommentars nicht vorkommen. Einige Parser lehnen solche Dokumente ab. Stellen Sie sicher, dass Kommentarinhalte keine doppelten Bindestriche enthalten, wenn XML-Konformität erforderlich ist.

Sicherheit: Wenn Benutzereingaben in Kommentarknoten geschrieben werden, kann ein Angreifer mit der Sequenz --> den Kommentar vorzeitig schließen und ggf. eigene Markup-Inhalte einschleusen. Validieren oder escapen Sie externe Daten entsprechend, bevor Sie sie als Kommentarinhalt verwenden.

Die neue Dom\-API (PHP 8.4+) ist nicht rückwärtskompatibel mit DOMComment der alten ext/dom-Erweiterung. Beide APIs können jedoch parallel verwendet werden.