Signatur
Beschreibung
CommonMark\Node\HTMLInline ist ein Knotentyp aus der PHP-Erweiterung commonmark und bildet eingebettetes Inline-HTML innerhalb eines CommonMark-Dokumentbaums ab. Inline-HTML sind HTML-Tags oder -Entitäten, die direkt im Fließtext eines Markdown-Dokuments vorkommen, z. B. <em>Wichtig</em> oder <br />.
Dieser Knoten entsteht beim Parsen von Markdown-Inhalten mit dem CommonMark-Parser, wenn der Parser auf Inline-HTML-Sequenzen trifft. Im Unterschied zu CommonMark\Node\HTMLBlock, der ganze HTML-Blöcke (eigene Absätze) repräsentiert, steht HTMLInline für HTML-Fragmente, die innerhalb eines Absatzes oder einer anderen Inline-Umgebung eingebettet sind.
Der Knoten besitzt eine literal-Eigenschaft, über die der rohe HTML-String des Inline-Fragments gelesen und gesetzt werden kann. Beim Traversieren oder Transformieren des AST lässt sich so gezielt auf eingebettete HTML-Teile zugreifen, um diese zu prüfen, zu sanitisieren oder zu ersetzen.
Die Klasse ist besonders nützlich, wenn eigene Renderer oder AST-Transformationen implementiert werden und dabei Inline-HTML-Knoten gesondert behandelt werden müssen — etwa um aus Sicherheitsgründen unerwünschte Tags herauszufiltern oder zu escapen.
Beispiele
Inline-HTML-Knoten aus geparsten Markdown erkennen
<?php
use CommonMark\Parser;
use CommonMark\Node\HTMLInline;
use CommonMark\Interfaces\IVisitor;
use CommonMark\Interfaces\IVisitable;
$parser = new Parser();
$document = $parser->parse('Hallo <strong>Welt</strong> und <br /> Zeilenumbruch.');
// AST traversieren und HTMLInline-Knoten finden
function findHTMLInlineNodes($node): void {
if ($node instanceof HTMLInline) {
echo 'Inline-HTML gefunden: ' . $node->literal . PHP_EOL;
}
foreach ($node->children() as $child) {
findHTMLInlineNodes($child);
}
}
findHTMLInlineNodes($document);
Literal eines HTMLInline-Knotens manuell setzen
<?php
use CommonMark\Node\HTMLInline;
use CommonMark\Node\Paragraph;
use CommonMark\Node\Document;
use CommonMark\Render\HTML as HTMLRenderer;
$document = new Document();
$paragraph = new Paragraph();
$document->appendChild($paragraph);
$inlineHtml = new HTMLInline();
$inlineHtml->literal = '<span class="highlight">';
$paragraph->appendChild($inlineHtml);
$renderer = new HTMLRenderer();
echo $renderer->render($document);
// Wichtig · Fallstricke
Sicherheitshinweis: Inline-HTML-Knoten enthalten rohen HTML-Code, der bei der Ausgabe nicht automatisch escaped wird. Wenn Markdown aus nicht vertrauenswürdigen Quellen (z. B. Benutzereingaben) geparst wird, können HTMLInline-Knoten schädliche HTML- oder JavaScript-Fragmente enthalten. Es wird dringend empfohlen, solche Knoten beim Rendern zu entfernen oder zu escapen bzw. den CommonMark-Renderer mit deaktiviertem Inline-HTML zu konfigurieren (html_unsafe-Option prüfen).
Die commonmark-PHP-Erweiterung ist eine native C-Erweiterung und muss separat installiert werden. Sie ist nicht in der PHP-Standardinstallation enthalten.