highlight_string

Zdravim mam takovy problem. Na mem webu sem si upravil "diskuzi" a chtel bych aby se v prispevcich barevne zvyraznil html kód. Mam to udelane takhle:

$vypis = preg_replace("#\[kod\](.*?)\[/kod\]#si", "<pre>".highlight_string("\\1", TRUE)."</pre>", $vypis);

Ale nevim proc to nefunguje...

vypise to sice ...<code>....tagy..</code>... ale jedina barva co se nadefinuje je cerna a hotovo... Nevite jak to upravit aby se to obarvilo jak ma?
<HTML>Kod pro zvyrazneni musi byt PHP.. a to funkce rozlisi tak, ze obarvi pouze kod mezi: <?php ....... ?>
Pokud to retezec neobsahuje provede se pouze zachovani formatovani.</HTML>
prave ze tam davam script s <?php ... ale stejne vyjede cerny... vim ze to na html nefunguje... Ale stejne to nejede...
Jde o to, ze do highlight_string posles '\1', a ne ten cely kod. Musis to udelat nejak takhle (je to trochu prasarna, ale funguje to):

http://strelka.unas.cz/html/temp/php_highlight.php

NETu zdar, SPAMu zmar!
Rellik, asi jsem to pochopil. Po testu ;-)
$a="echo 'blbina';";
echo highlight_string($a); # tohle bude černé
$a = "<?php echo 'blbina'; ?>";
echo highlight_string($a); # tohle bude barevné

fakt to tak funguje.
<HTML>Nevsiml jsem si jak funkci highlight_string pouzivas...
Pouzil bych na to callbackovou funkci:

function syntax_callback($match) { return highlight_string($match[2], true); }

$text = preg_replace_callback("/(\[kod\])(.+)(\[\/kod\])/s", "syntax_callback", $text);</HTML>
> Richard
buhuzel ani tak to nejde... a navic to zastavi script hned po tom vypisu takze se zbytek stranky nenacte...
>Marek z Markova
Vim jak vypsat kod barevne, ale kdyby sis precetl o co mi jde tak bys vedel ze resim trochu neco jineho... ;)
já bych to radši řešil na víckrát:
1) vycucnu řetězec mezi [kod][/kod] do proměnné
2) obarvím obsah proměnné pomocí higlight_string()
3) nahradím [kod] ... [/kod] za <pre>.obarveny_kod.<pre>

Možná že tu bude leší než s tím válčit v kupě ;)
>Tom
Mohl by si napsat ukazku? Nejak mi to nejde dat dokupy... :)
Rellik: Nechce se mi nad tím moc přemýšlet, navíc ještě dělat nějaké regexpy, tak zkusím něco sesmolit sedláckou metodou:

$array = explode ('[code]', $text);
for($i=0;$i<count($array);$i++) {
if(substr_count($array[$i],'[/code]')) {
$subarray = explode ('[/code]', $array[$i]);
$subarray[0] = highlight_string ($subarray[0]);
$array[$i] = implode('</code>', $subarray);
}
}
$text = implode ('<code>', $array);

Je to sice běs a hrůza, ale možná že to bude taky fungovat. Jinak, pokud by jsi chtěl elefantní řešení, tak použij první popis:
regexpem načti řetězec mezi [kod][/kod] do proměnné, tu obarvi, ze začátku a konce doplň o <tag> a </tag> a nakonec to nahraď. Pokud budu mít a náladu, tak ti to možná i sesmolim ;)
>Tom dik. az budu doma tak to skusim a napisu jak to dopadlo. A pak teprve kdybys byl tak hodny a napsal mi kod. :) Zatim diky. :)
>Tom
Tak sem skusil ten tvuj kod, obarvi to, ale jenom pokud se mu posle jen kod kde se znaky < a > neprevedou na entity coz pri vkladani prispevku neni zrovna bezpecne... Jde nejak aby se tyto znaky pak mezi temi znackami [kod]...[/kod] prepsaly z entit zpet na < , > ? Diky. :)
Týjo, ono to vážně funguje? Já sem to sepsal jen tak z hlavy. Sákryš, já sem dobrej ;)
Zkus třeba:
$text = str_replace('<', '<', $text);
$text = str_replace('&qt;', '>', $text);

Jinak na tu elegantnější verzi nemám čas, před nějakou dobou jsem slíbil známými udělat web pro jeho firmu a teď jsem zjistil, že to musí být na konci února hotové a ještě jsem ani nazačal :)
>Tom
To uz sem skousel ale vypisuju tak celou tabulku takze to nejde pouzit. Ono by to chtelo zmenit ty entitiy zpet na znaky jen mezi tim [kod] a [/kod]. Ale uvidime.. Az budu doma tak se s tim skusim pohrat vic... Tedky su na dovolene a pristup na net tu je nic moc a navic tu nemam localhost a pokusy. A porad to delat pres web se mi moc nechce... Tak zatim diky. :)
>Tom
Tak uz sem to vyresil pomoci toho tveho scriptu.. Pridal sem tam zmenu tech entit zpet na znaky a bylo. :) Takze to zatim funguje. Ale kdybys mel pak nekdy cas na to "elegantnejsi" reseni jak si psal, tak bych byl rad kdybys ho byl ochotny napsat. Zatim diky. :)