Start · Sprachen · PHP · Referenz · CommonMark\Render

CommonMark\Render

Funktion

Rendert ein geparstertes CommonMark-Dokument-Knoten als HTML-String.

seit PHP 7.0 Kategorie: misc

Signatur

CommonMark\Render(CommonMark\Node\Document $node, int $options = 0): string

Beschreibung

CommonMark\Render ist Teil der PHP-Erweiterung CommonMark (PECL) und wandelt einen zuvor geparsten CommonMark\Node\Document-Knoten in HTML-Ausgabe um. Sie wird üblicherweise zusammen mit CommonMark\Parse verwendet: Zuerst wird Markdown-Text eingelesen und zu einem AST (Abstract Syntax Tree) geparst, danach wird dieser AST mit CommonMark\Render in HTML gerendert.

Die Funktion unterstützt optionale Renderoptionen, die über Integer-Flags gesteuert werden. Zu den verfügbaren Flags gehören z. B. CommonMark\Render\Sourcepos (fügt Quellpositionsangaben in die HTML-Ausgabe ein), CommonMark\Render\HardBreaks (erzwingt harte Zeilenumbrüche) und weitere, die das Ausgabeverhalten beeinflussen.

Ein typischer Einsatz dieser Funktion ist die sichere Darstellung von Benutzer-Markdown-Inhalten in Webanwendungen, wobei zunächst geparstes Markdown in HTML überführt wird. Der AST erlaubt außerdem Transformationen vor dem eigentlichen Rendering, was eine flexible Verarbeitung ermöglicht.

Hinweis: Die CommonMark-Erweiterung ist nicht im PHP-Core enthalten und muss separat über PECL installiert werden (pecl install commonmark).

Parameter

Name Typ Default Beschreibung
$node Pflicht CommonMark\Node\Document Das geparste CommonMark-Dokumentknoten-Objekt, das gerendert werden soll. In der Regel das Rückgabeergebnis von CommonMark\Parse().
$options int 0 Optionale Bitmaske aus Render-Flags. Mögliche Werte sind z. B. CommonMark\Render\Sourcepos, CommonMark\Render\HardBreaks, CommonMark\Render\Safe oder CommonMark\Render\NoBreaks. Standardmäßig sind keine zusätzlichen Optionen aktiv.

Rückgabewert

Typ
string
Beschreibung
Gibt den gerenderten HTML-String des CommonMark-Dokuments zurück. Im Fehlerfall (z. B. ungültiger Knoten) wird eine \Error-Exception ausgelöst.

Beispiele

Einfaches Markdown zu HTML rendern

<?php
// Markdown-Text parsen
$markdown = "# Hallo Welt\n\nDies ist **fetter** Text mit einem [Link](https://example.com).";

$document = CommonMark\Parse($markdown);

// Gerenderten HTML-String erzeugen
$html = CommonMark\Render($document);

echo $html;
<h1>Hallo Welt</h1> <p>Dies ist <strong>fetter</strong> Text mit einem <a href="https://example.com">Link</a>.</p>

Rendering mit Quellpositions-Angaben (Sourcepos)

<?php
$markdown = "## Abschnitt\n\nEin kurzer Absatz.";

$document = CommonMark\Parse($markdown);

// Sourcepos-Flag aktivieren: fügt data-sourcepos-Attribute ein
$html = CommonMark\Render($document, CommonMark\Render\Sourcepos);

echo $html;
<h2 data-sourcepos="1:1-1:12">Abschnitt</h2> <p data-sourcepos="3:1-3:18">Ein kurzer Absatz.</p>

Sicheres Rendering mit Safe-Flag (verhindert Raw-HTML)

<?php
// Benutzereingabe, die potenziell gefährliches HTML enthält
$userInput = "Normaler Text\n\n<script>alert('XSS');</script>\n\n**Fett**";

$document = CommonMark\Parse($userInput);

// Mit Safe-Flag wird eingebettetes Raw-HTML unterdrückt
$html = CommonMark\Render($document, CommonMark\Render\Safe);

echo $html;
<p>Normaler Text</p> <!-- raw HTML omitted --> <p><strong>Fett</strong></p>

// Wichtig · Fallstricke

Sicherheit: Ohne das Flag CommonMark\Render\Safe wird in Markdown eingebettetes Raw-HTML unverändert in die Ausgabe übernommen. Dies kann zu XSS-Angriffen führen, wenn die Eingabe von Benutzern stammt. Verwende daher immer das Safe-Flag bei nicht vertrauenswürdigen Eingaben oder bereinige die HTML-Ausgabe zusätzlich mit einer Bibliothek wie HTMLPurifier.

Die CommonMark-Erweiterung ist eine PECL-Erweiterung und nicht standardmäßig in PHP vorhanden. Stelle sicher, dass ext-commonmark in deiner composer.json als Abhängigkeit deklariert ist oder dass die Erweiterung serverseitig installiert und aktiviert ist.

Der AST (CommonMark\Node\Document) kann vor dem Rendering programmatisch verändert werden (Knoten hinzufügen, entfernen, traversieren), was CommonMark\Render besonders flexibel einsetzbar macht.