PDA

Просмотр полной версии : Есть ли в природе скрипт, который читает Хтмл файл, и раскрашивает ПХП код?


Delt@DIM
24.08.2003, 13:37
Приветсвую!
Не дадите ПХП скрипт который в хтмл тексте "раскрашивает" ПХП код!

Nirva
24.08.2003, 14:14
есть. =)
highlight_file(), если ты читаешь весь файл и выводишь его
или
highlight_string(), если построчно.

http://ua.php.net/manual-lookup.php?pattern=highligth
http://ua.php.net/manual/ru/function.highlight-string.php
http://ua.php.net/manual/ru/function.highlight-file.php

Delt@DIM
24.08.2003, 14:34
Да, но эти функции портят хтмл, они ВЕСЬ код заключают межну символами <code> </code>

Delt@DIM
24.08.2003, 14:53
Или подскажите код, который ищет в Хтмле Пхп и применяет функцию highlight_string
Как например в этом форуме после кода [PHP]

Nirva
24.08.2003, 15:11
ууу... гляди, с помощью регуляров (можно писать не буду? =)) ищешь то, что находится между <code> и <code> и заменяешь на то же самое, только с подсветкой. так идет?

Самурай
24.08.2003, 16:51
портят скрипт?
а вам нужно что б еще и кофе варили?

Nirva
24.08.2003, 17:29
а ты что думал, в пхп 5 такое будет:

highlight_file (string filename[, bool return[, str flags]])

str flags:
GET_COFEE_AFTER - приготовить кофе после операции вывода содердимого файла а стандарнтый поток вывода
GET_COFEE_BEFORE - до соответсвенно

в 5.1 должны появится флаги get_tea и get_cofee_{when}_[string sort]

Delt@DIM
24.08.2003, 18:11
Оригинал написал(а) Nirva
ууу... гляди, с помощью регуляров (можно писать не буду? =)) ищешь то, что находится между <code> и <code> и заменяешь на то же самое, только с подсветкой. так идет?
АГА, вот только с регулярными выражениями я не совсем в ладах...

Nirva
24.08.2003, 18:33
хехе... я тоже... ща выдам... попробуюю..

% <(code)>(.*)</\\1> %

вот так будет выглядеть шаблон. =)
ищешь
preg_match (pattern, str, subject, $array)

в $array[0] у тебя код, вот его highlight_string()
и потом опять же ищешь, но заменой preg_replace()

Nirva
24.08.2003, 18:37
да, кстати. подразумевается, что код у тебя встречается единожды. и незабудь вырезать <code>, думаю, легче сделать это хоть субстрингом - 6 с начала, 6 с конца.

juggy
24.08.2003, 19:11
<?

// исходное сообщение:
// ------------------------------------------------------
$str='
Памагите, ничаво не работает! Вот пример:
[ php ]
// comment
# comment
phpinfo();
[ /php ]

ляляля ляляля

[ php ]
for ($i=0; $i<100; $i++) {
ping("-f","www.ru");
}
[ /php ]
<?
echo "<a href=http://php.spb.ru/chat/>click here!</a>";
phpinfo();
?>
';
// ------------------------------------------------------

// подавить предупреждения (в highlight_string есть глюки)
error_reporting(0);

// функция подсвечивания одного куска текста
function _my_($s,$a1,$a2) {
if ($a1!="<?") { $a1="<?"; $a2="?>"; }
$s=str_replace("\\\"","\"",$s);
ob_start();
highlight_string($a1.$s.$a2);
$s=ob_get_contents();
ob_end_clean();
return $s;
}

// ищем в тексте все куски между <?... или [PHP]...
$str=preg_replace("!(\[php\]|<\?)(.*?)(\[/php\]|\?>)!ise","_my_('\\2','\\1','\\3')",$str);

echo $str;

?>

Nirva
25.08.2003, 00:18
вот какой хороший мальчик...

Delt@DIM
25.08.2003, 09:46
Странно, у меня этот код вызывает ошибку в 138 строке $s=str_replace("\\"",""",$s);

nagash
25.08.2003, 22:41
вот если бы ты написал что за ошибка всем было бы намного проще!
хотя строка $s=str_replace("\\"",""",$s); довольно итнтересная... =)

juggy
25.08.2003, 23:02
Скрипт лежит тут (http://www.php.spb.ru/php/regexp.html)

nagash
25.08.2003, 23:10
ну именно там есть некое отличие в этой строке...
и тем более сколько лет уже той статье...
stripslashes тоже неплохо...