Хм. Я попробовал и получается, что этот код высвечивает все, что было введено в textarea. Если брать на примере этого форума, то этот скрипт выдаст мне на экране:
РНР:
------------------------------------
здесь он выдаст ВСЕ, что я ввел в текстареа, а не только РНР-код.
------------------------------------
Вот мой код, на основе кода
DM`a:
<body style="font-family:Verdana,Tahoma,sabs-serif; font-size:10pt;
font-weight:700;">
<?
if ($code) {
$code = str_replace("
", "", $code);
$code = str_replace("
", "", $code);
$code = str_replace(">", ">", $code);
$code = str_replace("<", "<", $code);
$code = str_replace("&", "&", $code);
$code = str_replace(\'$\', \'\\$\', $code);
$code = str_replace(\'\\n\', \'\\\\n\', $code);
$code = str_replace(\'\\r\', \'\\\\r\', $code);
$code = str_replace(\'\\t\', \'\\\\t\', $code);
$code = stripslashes($code);
if (!strpos($code,"<?") and substr($code,0,2)!="<?") {
$code="<?\\n".trim($code)."\\n?>"; //<?
$addedtags=1;
}
ob_start();
$oldlevel=error_reporting(0);
highlight_string($code);
error_reporting($oldlevel);
$buffer = ob_get_contents();
ob_end_clean();
if ($addedtags) {
$openingpos = strpos($buffer,\'<?\');
$closingpos = strrpos($buffer, \'?\');
$buffer=substr($buffer, 0, $openingpos).substr($buffer, $openingpos+5, $closingpos-($openingpos+5)).substr($buffer, $closingpos+5);
}
$buffer = str_replace(""", "\\"", $buffer);
echo "<blockquote><pre><smallfont>PHP:</smallfont><hr>$buffer<hr></pre></blockquote>";
}
else {
echo "<form action=$PHP_SELF method=post><textarea wrap cols=60 rows=20 name=code></textarea>
<input type=submit value=GO></form>";
}
?>
</body>
Интересно, а как он отлавливает все что находится между [РНР] и [/РНР] и записывает в $code? Иными словами, может кто-нибудь знает, как сделано на этом форуме, текст сообщения сохраняет стиль (шрифт, размер), а код отдельно хайлайтом подсвечивается?