Um PHP Quelltext in HTML-Seiten darzustellen, gibt es eine eigene PHP-Funktion, die das für einen erledigt.
Die Funktion heisst highlight_string. Sie wandelt den Quelltext um - die htmlentities werden maskiert und die Farbinformationen werden mittels der in der php.ini angegebenen Farben umgewandelt.
Leider benutzt die Funktion die veraltete Font-Funktion (bei PHP-Versionen < 5)
(<font color="#ff0000">...</font>)
Hat man ein CSS-Design, so stören diese veralteten Tags.
Aus diesem Grund habe ich eine kleine Funktion geschrieben, die diese Tags durch spans ersetzt. Die Funktion zum highlighten ist integriert, so das man einfach diese Funktion statt der Standarfunktion aufrufen kann. Der Syntax ist genau der gleiche:
php_highlight($source);
oder
$var=php_highlight($source,true);
Die Font-Angaben werden in spans mit Klassenangaben umgewandelt. Dadurch ist man sogar in der Lage, ein eigenes Farbschema zu benutzen.
Möchte man die Standardfarben benutzen, so muss man nur vorher die Funktion GetHighlightCSS() auszugeben, es wird die CSS-Definition geschrieben.
Natürlich kann man das auch in seine CSS auslagern.
Zusätzlich habe ich noch die Zeichen <br /> und ersetzt, wer es anders möchte, kann es leicht ändern.
PHP-Code:
function php_highlight($source,$no_echo=false) {
$search=Array('<font color="'.ini_get('highlight.bg').'">',
'<font color="'.ini_get('highlight.html').'">',
'<font color="'.ini_get('highlight.default').'">',
'<font color="'.ini_get('highlight.keyword').'">',
'<font color="'.ini_get('highlight.string').'">',
'<font color="'.ini_get('highlight.comment').'">',
'</font>',
' ',
'<br />');
$replace=Array('<span class="highlight-bg">',
'<span class="highlight-html">',
'<span class="highlight-default">',
'<span class="highlight-keyword">',
'<span class="highlight-string">',
'<span class="highlight-comment">',
'</span>',
' ',
"\n");
$highlightstring=str_replace($search, $replace, highlight_string($source,true));
if($no_echo)
return $highlightstring;
else echo $highlightstring;
}
function GetHighlightCSS() {
$linebreak="\n";
$s="/* Highlight Definition for Inline-Elements */$linebreak
.highlight-bg {color: ".ini_get('highlight.bg').";}$linebreak
.highlight-html {color: ".ini_get('highlight.html').";}$linebreak
.highlight-default {color: ".ini_get('highlight.default').";}$linebreak
.highlight-keyword {color: ".ini_get('highlight.keyword').";}$linebreak
.highlight-string {color: ".ini_get('highlight.string').";}$linebreak
.highlight-comment {color: ".ini_get('highlight.comment').";}$linebreak
$linebreak";
return $s;
}
Und hier die Ersetzung für PHP >= 5 :
PHP-Code:
function php_highlight($source,$no_echo=false) {
$search=Array('style="color: '.ini_get('highlight.bg').'"',
'style="color: '.ini_get('highlight.html').'"',
'style="color: '.ini_get('highlight.default').'"',
'style="color: '.ini_get('highlight.keyword').'"',
'style="color: '.ini_get('highlight.string').'"',
'style="color: '.ini_get('highlight.comment').'"',
' ',
'<br />');
$replace=Array('class="highlight-bg"',
'class="highlight-html"',
'class="highlight-default"',
'class="highlight-keyword"',
'class="highlight-string"',
'class="highlight-comment"',
' ',
"\n");
$highlightstring=str_replace($search, $replace, highlight_string($source,true));
if($no_echo)
return $highlightstring;
else echo $highlightstring;
}
function GetHighlightCSS() {
$linebreak="\n";
$s="/* Highlight Definition for Inline-Elements */$linebreak
.highlight-bg {color: ".ini_get('highlight.bg').";}$linebreak
.highlight-html {color: ".ini_get('highlight.html').";}$linebreak
.highlight-default {color: ".ini_get('highlight.default').";}$linebreak
.highlight-keyword {color: ".ini_get('highlight.keyword').";}$linebreak
.highlight-string {color: ".ini_get('highlight.string').";}$linebreak
.highlight-comment {color: ".ini_get('highlight.comment').";}$linebreak
$linebreak";
return $s;
}