Signatur
Beschreibung
CommonMark\Node\CodeBlock ist ein Knotentyp im abstrakten Syntaxbaum (AST) der CommonMark-PHP-Erweiterung. Er steht für Codeblöcke, die entweder durch Einrückung (4 Leerzeichen oder 1 Tab) oder durch Absperrung (drei oder mehr Backticks bzw. Tilden) im CommonMark-Markdown ausgezeichnet wurden.
Ein CodeBlock-Knoten besitzt zwei wesentliche Eigenschaften: literal enthält den rohen Text-Inhalt des Codeblocks, und fenceInfo speichert den optionalen Sprach-Bezeichner, der bei umzäunten Blöcken hinter den öffnenden Backticks oder Tilden angegeben wird (z. B. php oder javascript).
Die Klasse wird typischerweise beim Parsen von Markdown-Dokumenten mit CommonMark\Parser erzeugt, kann aber auch programmatisch instanziiert werden, um Codeblöcke in einem Dokument-AST zu konstruieren oder zu manipulieren, bevor dieser in HTML gerendert wird.
- literal (
string|null): Der reine Quelltext innerhalb des Codeblocks. - fenceInfo (
string|null): Der Info-String des Zaunblocks (z. B. die Programmiersprache).
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $literal | string|null | null | Der Inhalt des Codeblocks als Klartext-Zeichenkette. Kann nach der Instanziierung über die Eigenschaft literal gesetzt werden. |
| $fenceInfo | string|null | null | Der Info-String des Zaunblocks, üblicherweise die Sprach-Kennzeichnung (z. B. 'php'). Nur bei umzäunten Blöcken relevant. |
Rückgabewert
Beispiele
Codeblock aus geparsten Markdown lesen
<?php
use CommonMark\Parser;
use CommonMark\Node\CodeBlock;
$parser = new Parser();
$document = $parser->parse(<<<MD
```php
echo 'Hallo Welt';
```
MD);
// AST traversieren und alle CodeBlock-Knoten ausgeben
foreach ($document as $node) {
if ($node instanceof CodeBlock) {
echo 'Sprache : ' . ($node->fenceInfo ?? '(keine)') . PHP_EOL;
echo 'Inhalt : ' . $node->literal . PHP_EOL;
}
}
Codeblock programmatisch erstellen und rendern
<?php
use CommonMark\Node\Document;
use CommonMark\Node\CodeBlock;
use CommonMark\Render\HTML;
$document = new Document();
$block = new CodeBlock();
$block->fenceInfo = 'javascript';
$block->literal = "console.log('Hallo');\n";
$document->appendChild($block);
$renderer = new HTML();
echo $renderer->render($document);
// Wichtig · Fallstricke
Erweiterung erforderlich: CommonMark\Node\CodeBlock gehört zur PHP-Erweiterung cmark (ext-cmark), die separat installiert werden muss (z. B. über PECL: pecl install cmark). Sie ist nicht im PHP-Kern enthalten.
Sicherheit: Der Inhalt von literal wird beim HTML-Rendering von der Erweiterung HTML-kodiert und ist daher in der Standardausgabe XSS-sicher. Wer den Wert anderweitig verarbeitet, muss selbst auf korrektes Escaping achten (htmlspecialchars()).
Unterschied zu InlineCode: Für einzeiligen Inline-Code (einzelne Backticks im Fließtext) existiert der separate Knotentyp CommonMark\Node\Code.