Syntax-Einfärbung

Naisetsu

Mitglied
Hallo Leute,

Bestimmt ist dies ein "alter Lumpen":

Mit show_source("Pfad/zum/File.php"); kann man ja den PHP-Code einfärben lassen, ohne dass er ausgeführt wird.

Ich will aber nicht jedesmal eine Datei anlegen, den Code auslagern, einbinden und ausgeben, sondern suche ein Script, dem du definieren kannst VON HIER bis HIER (oder mit einer Variable $source = "if else $var="" etc...") sollst du den Code färben und ausgeben, statt ausführen.
Sinnvoll ist es ja, wenn die Formatierung auch beibehalten wird ala <pre>

Allg. wo haben wir bereits solche Scripts vorhanden?
Oder wie wird dies hier im Forum gemacht?

Gruss
Samurai
 
Dabei sei angemerkt, dass dabei der gehighlightete (was ein Wort ;) ) Source direkt ausgegeben wird und nicht von der Funktion zurueckgegeben wird.
Will man die Ausgabe in eine Variable packen so muss man mit dem Output Buffer arbeiten.
Das muesste aber auch in der Funktions-Doku stehen denk ich.

Naehere Infos zu den Funktionen rund um's Output Buffering gibt es im Abschnitt Output Control auf php.net.
 
@Lars:
Vielen Dank für deine Links, die haben mich zu meinem Resultat gebracht

Nun hab ich aber noch ein Problem:

In meiner Variable $code habe ich zusätzliche $variablen und Werte mit " bzw ' definiert. Diese werden jedoch als Fehler dargestellt, bzw. die Variablen mit Ihren zugewiesenen Werten ersetzt! Ersetze ich die " in ' nach $code, so werden wiederum werte in ' falsch dargestellt/Fehler :(

PHP:
<?php
$code = " $variable = "hallo" ";
highlight_code($code);

?>

Warum wird mein PHP-Code denn in der Variable $code so dargestellt, bzw. was kann man endgültig dagegen unternehmen?
Ich will nicht alle " bzw. ' und $var mit \ ersetzen!
Da käme es einfacher (dennoch aufwändiger) einzelne Files zu erstellen mit dem Original-Code...

Gruss Alex :(
 
Das Problem liegt darin, dass $variable = "hallo" nicht unbedings PHP-Quellcode darstellen muss. Es könnte beispielsweise auch Perl-Quellcode sein (könnte es das?).
Um PHP-Quellcode eindeutig auszuzeichnen – beispielsweise auch für den PHP-Parser und -Interpreter –, besitzt PHP so genannte Start- und End-Tags (<?php … ?> oder auch die kürzeren Varianten). Gibst du diese mit an, weiß auch die Syntax-Highlighting-Funktion nun explizit – da diese nämlich ebenfalls einen lexikalischen Scanner zum zerteilen der Daten in so genannte Tokens verwendet –, dass es sich um PHP-Quellcode handelt.

Deshalb solltest du mal Folgendes probieren:
PHP:
<?php

	$code = '<?php $variable = "hallo"; ?>';
	highlight_code($code);

?>
 
Hallo!

Ich weiss ja nicht was Du im einzelnem vorhast.
Aber wenn Du den Quellcode einer gesamten Datei anzeigen lassen willst, lege diese doch als datei.phps ab und verlinke sie entsprechend.

Gruss Dr Dau
 
@DrDau:
Dass ich gerade DASS nicht möchte, habe ich bereits im ersten Beitrag geschrieben.

@Gumbo:

Das eigentliche Problem kommt dann zum Vorschein, wenn ich EINFACHE ( ' ) und DOPPELTE ( " ) Anführungszeichen im Code habe [belehrt mich, wenn dies falsch ist!]

MySQL-Code mit EINFACHEN Anführungszeichen im Code:
PHP:
<?php
$code = "# Tabellenstruktur für Tabelle `menu`
CREATE TABLE `menu` (
  `mid` int(11) NOT NULL auto_increment,
  `eintrag` char(25) NOT NULL default '',
  `vater` int(11) NOT NULL default '0',
  `href` char(50) NOT NULL default '',
  PRIMARY KEY  (`mid`)
) TYPE=MyISAM;";
highlight_code($code);
?>


PHP-Code mit DOPPELTEN Anführungszeichen im Code:
PHP:
<?php
$code2 = '<?php
session_start();
$var = "red";
include("syntax_highlighting.inc.php"); // für die farbliche Ausgabe von PHP-Code
include("functions.inc.php"); // Funktion für Ausgabe des entsprechenden Contents
?>';
highlight_code($code2);

?>

Wenn ich gemischte Anführungszeichen habe, dann weiss ich ja nicht, mit Welchen Zeichen ich meinen String abgrenzen will:

PHP:
$code = "  "; bzw $code = '  ';

...gibt es da überhaupt eine Lösung?
Explizit immer mit " arbeiten anstelle ' ?

Anbei: Danke für eure Bemühungen!
 
Innerhalb der Auszeichnung von Zeichenketten kannst du aber auch die als „Zeichenkettenbegrenzer“ eingesetzten Zeichen selbst als Zeichen durch Maskierung dieser Zeichen auszeichnen. (Sehr verwirrend!)
PHP:
<?php

	echo "Andrea: \"Mein Freund heißt Andreas.\"";
	echo 'Andreas\' Freundin heißt Andrea.';

?>
Do könntest die Zeichenkette jedoch auch mithilfe der „Heredoc“-Syntax auszeichnen.
 
Nun, ich wollte zwar die Zeichenkette nicht mit \ maskieren.
Die HereDoc-Syntax war mir bislang unbekannt! Danke für den Tipp!
Ich habe sie ausprobiert, und es funktioniert (halbwegs).

Wie ich nun in Erfahrung bringen konnte, wird bei der HereDoc-Syntax u.a. kein " bzw. ' für den String benötigt.
Unschöner Nachteil ist jedoch die Darstellung im Quellkot:
(beachte verschachtelte und wiederholte php-tags!)

PHP:
<?php
$code = <<<EOD
# Tabellenstruktur für Tabelle `menu`
CREATE TABLE `menu` (
  `mid` int(11) NOT NULL auto_increment,
  `eintrag` char(25) NOT NULL default '',
  `vater` int(11) NOT NULL default '0',
  `href` char(50) NOT NULL default '',
  PRIMARY KEY  (`mid`)
) TYPE=MyISAM;
EOD;
highlight_code($code);

$code2 = <<<EOD
<?php
session_start();
include('syntax_highlighting.inc.php'); // für die farbliche Ausgabe von PHP-Code
include("functions.inc.php");
?>
EOD;
highlight_code($code2);
?>


Vielen Dank für Eure Hilfe!
Gruss Samurai
 
Zuletzt bearbeitet:
Unschöner Nachteil ist jedoch die Darstellung im Quellkot […]
Das wird dann wohl an der Verarbeitung der Zeichenkette innerhalb der highlight_code()-Funktion liegen.

Übrigens hat „Quellcode“ nichts mit Exkrementen („Quellkot“) zu tun.
 
Zurück