PHP und JavaScript Code mit PHP hervorheben

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

PHP hat eine coole Funktion, die PHP-Code automatisch hervorhebt und sich highlight_string(); nennt. Theoretisch könnte man damit auch eigenen Code auf einer Website hervorheben, anstatt sich auf JavaScript oder irgendeinen externen Dienst zu verlassen. In diesem Artikel zeige ich die Grundlagen, wie es funktioniert, und erweitere es dann mit ein paar Tricks. Da JavaScript in der Syntax PHP sehr ähnlich ist, können wir die Funktion austricksen, um auch JavaScript-Code hervorzuheben. Und schließlich zeige ich, wie wir mit etwas Intelligenz den Code automatisch einrücken können.

Besonderer Dank geht an Benjamin Mayo (Darren Beige), der die format_javascript() Funktion geschrieben hat, die wir uns unten ansehen werden.

Grundlegende Verwendung

Die Funktion highlight_string() akzeptiert nur einen String, der mit <?php beginnen und mit ?> enden muss. Standardmäßig gibt sie die Zeile aus.

<?php highlight_string('<?php 
  $i = 1; 
  
  function rockOut() {
      alert("wah wah wah");
  }
?>'); ?>

Der resultierende HTML-Code lautet

<pre id="code_highlighted"><code><span style="color: #0000BB">
<span style="color: #0000BB">&lt;script type="text/javascript">&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">true</span><span style="color: #007700">)&nbsp;{
	&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'The&nbsp;value&nbsp;is&nbsp;true'</span><span style="color: #007700">;
	}&nbsp;else&nbsp;{
	&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'The&nbsp;value&nbsp;is&nbsp;false'</span><span style="color: #007700">;
	}

</span><span style="color: #0000BB">&lt;/script&gt;</span>
</span>

Und das sieht dann so aus

Ziemlich wild, oder? Wenn Sie möchten, dass der String zurückgegeben und nicht ausgegeben wird, übergeben Sie einfach TRUE als zweiten Parameter.

Austricksen, um JavaScript hervorzuheben

Benjamin Mayo (Darren Beige) hat eine PHP-Funktion entwickelt, die PHP dazu bringt, JavaScript-Code anstelle von ausschließlich PHP hervorzuheben. **Darüber hinaus** wendet sie auch eine korrekte Einrückung des Codes an, unabhängig davon, was in der Datei steht. Selbst wenn der ursprüngliche Code beispielsweise komplett linksbündig war wie dieser, wird die Ausgabe schön eingerückt sein.

Schauen Sie sich die Demo an, um es in Aktion zu sehen

Demo ansehen   Dateien herunterladen

Wie es funktioniert

Die Einrückung erfolgt durch Hinzufügen von Zeilenumbrüchen nach jeder geschweiften Klammer und jedem Semikolon, falls diese nicht bereits vorhanden sind. Dies platziert jede Anweisung auf eine eigene Zeile und bereitet den Code vor. Der Hauptteil des Codes für die Einrückung geschieht jedoch in der Schleife selbst.

$lineecho = $line;
if (substr_count($line, "\t") != $tab) {
   $lineecho = str_replace("\t", "", trim($lineecho));
   $lineecho = str_repeat("\t", $tab) . $lineecho;
}
$tab = $tab + substr_count($line, "{") - substr_count($line, "}");

Der Block funktioniert, indem er eine Zählung (in der Variablen $tab) der Anzahl von Tabulatorzeichen ("\t") in der vorherigen Zeile beibehält. Die aktuelle Zeile wird mit der Funktion substr_count() auf Tabs überprüft. Wenn die beiden Werte nicht übereinstimmen, wird die ausgegebene Zeile mit dem $tab-Wert aufgefüllt. Das bedeutet nun, dass die Anzahl der Tabulatorzeichen am Anfang der Zeile mit der Anzahl in der $tab-Variablen übereinstimmt. Nach diesem Verfahren wird der neue $tab-Wert berechnet, indem der aktuelle $tab-Wert genommen und die Anzahl der gefundenen öffnenden Klammern hinzuaddiert und die Anzahl der schließenden Klammern abgezogen wird.

Der Ausgabecode befindet sich in <pre>-Tags, damit die Tabs korrekt angezeigt werden.

Verwendung

Nehmen wir an, Sie möchten einen großen JavaScript-Code-Block hervorheben, der in einer Datei liegt. Ganz einfach, schließen Sie einfach die PHP-Datei/Funktion ein, holen Sie sich den Inhalt dieser Datei und führen Sie die Funktion darauf aus.

<?php 
  include_once('format_javascript.php'); 
  $BigJavaScriptString = file_get_contents('path/to/javascript.js');
  echo format_javascript($testBigJS);
?>

Das Problem hierbei ist, dass Sie den Code in eine String-Variable bekommen müssen, wenn Sie ihn auf diese Weise hervorheben möchten. Wenn Sie dies beispielsweise in einem CMS verwenden möchten, müssten Sie PHP in den gespeicherten Inhaltsbereichen speichern und ausführen können. Oder Sie müssten etwas ausgefallene Regex-Sachen schreiben, um Inhalte zu parsen, nach bestimmten Tags zu suchen und die Inneren in eine Variable zur Hervorhebung zu extrahieren. Über meinen Kopf hinweg.

Wenn Sie daran interessiert sind, wie Sie dies zum Hervorheben anderer Sprachen verwenden könnten, schauen Sie sich den Kommentarthread in der Dokumentation an, der einige Versuche zur Hervorhebung von XML und HTML enthält.

Weitere Ressourcen