Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Подсветка синтаксиса PHP
 
 автор: lirik   (04.12.2007 в 08:24)   письмо автору
 
 

Помогите люди добрые , видемо сегодня не мой день , часа два уже пишу подсветку PHP ,и чёт пока неочень !

Вопрос такой :
юсер пишет например вот такое сообщение

<code>
...тут пхп код...
$a=strpos($m,"<code>");
$b=strpos($m,"</code>");
...тут пхп код...
</code>

вопрос : как подсветить код между первым и последним тэгом не воспринемая остальные "...s($m,"<code>")..."

   
 
 автор: KPETuH   (04.12.2007 в 09:00)   письмо автору
 
   для: lirik   (04.12.2007 в 08:24)
 

highlight_string()

   
 
 автор: lirik   (04.12.2007 в 09:10)   письмо автору
 
   для: KPETuH   (04.12.2007 в 09:00)
 

ОБЫЧНЫЙ ТЕКСТ который не надо подсвечивать
<code>
...тут пхп код...
$a=strpos($m,"<code>");
$b=strpos($m,"</code>");
...тут пхп код...
</code>
ОБЫЧНЫЙ ТЕКСТ

   
 
 автор: kasmanaft   (04.12.2007 в 09:23)   письмо автору
 
   для: lirik   (04.12.2007 в 09:10)
 

Например вот так:

<?php

$text 
'юсер пишет например вот такое сообщение 
<code>
<?php
// тут php код
$a = strpos($m, "code");
$b = strpos($m, "code");
?>
</code>
вопрос : как подсветить код'
;

echo 
preg_replace("|<code>(.*?)</code>|ise""highlight_string(stripslashes('\\1'), 1)"$text);

?>

Смотрите, чтобы в самом коде не было тегов <code> ...

   
 
 автор: lirik   (04.12.2007 в 09:31)   письмо автору
 
   для: kasmanaft   (04.12.2007 в 09:23)
 

что то я не понял , что если юсеру необходимо использовать теги <code> , прийдется не довать ему это делать чтоли???

   
 
 автор: KPETuH   (04.12.2007 в 09:35)   письмо автору
 
   для: lirik   (04.12.2007 в 09:31)
 

читайте внимательно сначала... зачем давать юзеру использовать тег [код] внутри тега [код]?

   
 
 автор: lirik   (04.12.2007 в 09:41)   письмо автору
 
   для: KPETuH   (04.12.2007 в 09:35)
 

как сделать бездейственным тег [код] в нутри действующих тегов [код] ???

   
 
 автор: kasmanaft   (04.12.2007 в 09:41)   письмо автору
 
   для: lirik   (04.12.2007 в 09:31)
 

Придется отказаться от тега <code> и использовать, например, [code]
(или ~||phpcode||~ , если хотите :) )


>> как сделать бездейственным тег [код] в нутри действующих тегов [код] ???
Это сделать можно, но вряд ли это будет оправданно.. Только нагрузки больше.

   
 
 автор: lirik   (04.12.2007 в 09:55)   письмо автору
 
   для: kasmanaft   (04.12.2007 в 09:41)
 

>Придется отказаться от тега <code> и использовать, например, [code]
>(или ~||phpcode||~ , если хотите :) )
я и использую тег [code] , просто написал <code> что бы не выделялось .

>Это сделать можно, но вряд ли это будет оправданно.. Только нагрузки больше.
а это действительно так сложно , на первый взгляд вроде не очень , мне кажеться может заменять теги <code> которые идут после <?php и до ?> , а что делать с остальными ??

   
 
 автор: lirik   (04.12.2007 в 10:04)   письмо автору
 
   для: lirik   (04.12.2007 в 09:55)
 

или может сказать что если хотите использовать код , то обязательно пользуйтесь кнопкой по добавлению тегов ,а не пишите теги сами, потом средствами джаваскрипт передовать с этими тегами какойто id ???


что разве некто не решал эту проблему ?(если вообще это ктото считает проблемой)

   
 
 автор: kasmanaft   (04.12.2007 в 10:09)   письмо автору
 
   для: lirik   (04.12.2007 в 09:55)
 

>> может заменять теги <code> которые идут после <?php и до ?>
Вообще-то, по сути, вы эти теги вводите как для того, чтобы отделить простой текст от php кода. То, что находится между <code> и </code> - это php код. А не то, что между <?php и ?> !

А вообще-то... Попробуйте вот такое выражение: "#<code>((?:<code>.*?</code>|.)*?)</code>#ise"
Нагрузки возрастут, но не очень сильно.

   
 
 автор: lirik   (04.12.2007 в 10:19)   письмо автору
 
   для: kasmanaft   (04.12.2007 в 10:09)
 

>Вообще-то, по сути, вы эти теги вводите как для того, чтобы отделить простой текст от php кода. То, что находится между <code> и </code> - это php код. А не то, что между <?php и ?> !

поправте меня если я неправ , но насколько я знаю функция highlight_string считает пхп кодом тот текст который заключон в <?php ?> или <? ?> , а всё остальное хтмл кодом ?!
пример:

echo phpinfo();
<?php
 
echo phpinfo();
?>



// <!--теги  не используются-->
 echo phpinfo();



>Попробуйте вот такое выражение: "#<code>((?:<code>.*?</code>|.)*?)</code>#ise"

это рег.вырожение ? , я не силён в них , вы не могли бы написать приблезительный код

   
 
 автор: kasmanaft   (04.12.2007 в 10:24)   письмо автору
 
   для: lirik   (04.12.2007 в 10:19)
 

>> но насколько я знаю функция highlight_string считает пхп кодом тот текст который заключон в <?php ?> или <? ?>
Да, верно. Тогда зачем вы эти теги вводите?

>> это рег.вырожение ? , я не силён в них , вы не могли бы написать приблезительный код
Просто замените рег. выражение из кода, что я приводил наверху на это.

   
 
 автор: lirik   (04.12.2007 в 10:33)   письмо автору
 
   для: kasmanaft   (04.12.2007 в 10:24)
 

>>Тогда зачем вы эти теги вводите?

чтобы поместить код в рамку и использовать другой шрифт , а также если если пользователь спросит чтото конкретно про этот тег например :
<пример>А что если в теге <?php не писать php ? </пример>
тут теги не закрыты , и весь остальной текст будет разноцветным ?

   
 
 автор: lirik   (04.12.2007 в 10:46)   письмо автору
 
   для: kasmanaft   (04.12.2007 в 10:09)
 

>>Попробуйте вот такое выражение: "#<code>((?:<code>.*?</code>|.)*?)</code>#ise"

Извените , я уже говорил что не силен в них , но насколько я понял это вырожение
предотврощает ошибку при использовании <code></code> , а если между тегами будет один такой тег то всё заглючит ещё больше чем сначала , или нет ???

   
 
 автор: KPETuH   (04.12.2007 в 10:51)   письмо автору
 
   для: lirik   (04.12.2007 в 10:46)
 

ответь те пожалуйста в чем смысл делать вот так пользователю:

[kode]
...............
[kode]
чегото есче.....
[/kode]
.................
[/kode]

помоему просто тупо удалять все включения тегов [kode] и [/kode] в тексте между двумя крайними тегами... так как скорее всего это будет ошибка пользователя...

   
 
 автор: lirik   (04.12.2007 в 12:00)   письмо автору
 
   для: KPETuH   (04.12.2007 в 10:51)
 

>ответь те пожалуйста в чем смысл делать вот так пользователю:
>
>[kode]
>...............
>[kode]
>чегото есче.....
>[/kode]
>.................
>[/kode]

по мойму вопрос не умесный , и с чево вы взяли этот код ? , в своём вопросе я для примера привёл код

ОБЫЧНЫЙ ТЕКСТ который не надо подсвечивать
<code>
...тут пхп код...
$a=strpos($m,"<code>");
$b=strpos($m,"</code>");
...тут пхп код...
</code>
ОБЫЧНЫЙ ТЕКСТ

или вы это тоже считаете ошибкой пользователя ???

   
 
 автор: Faraon   (04.12.2007 в 12:09)   письмо автору
 
   для: lirik   (04.12.2007 в 12:00)
 

Так чем Вам тогда полный пример kasmanaft`а не нравится?

<?php
$text 
'юсер пишет например вот такое сообщение
<code>
<?php
// тут php код
$a = strpos($m, "<code>");
$b = strpos($m, "</code>");
?>
</code>
вопрос : как подсветить код'
;

echo 
preg_replace("#<code>((?:<code>.*?</code>|.)*?)</code>#ise""highlight_string(stripslashes('\\1'), 1)"$text);

?>

   
 
 автор: KPETuH   (04.12.2007 в 12:42)   письмо автору
 
   для: lirik   (04.12.2007 в 12:00)
 

вопрос мой проистекал из ваших ответов и вопросов на Код предложенный вам как решение...

   
 
 автор: kasmanaft   (04.12.2007 в 12:06)   письмо автору
 
   для: lirik   (04.12.2007 в 10:46)
 

>насколько я понял это вырожение предотврощает ошибку при использовании <code></code> , а если между тегами будет один такой тег то всё заглючит ещё больше чем сначала , или нет ???

Нет, хуже не будет (уже некуда :) ). Вы попробуйте, чего гадать.
В конце концов нажмет ваш пользователь на кнопочку "редактировать" и отредактирует как надо.

Попробуйте так:
echo preg_replace("|<code>(.*?)</code>|ise", "highlight_string(stripslashes('\\1'), 1)", $text);
и так:
echo preg_replace("#<code>((?:<code>.*?</code>|.)*?)</code>#ise", "highlight_string(stripslashes('\\1'), 1)", $text);

Поэксперементируйте, выберите, что лучше..

   
 
 автор: Unreal   (04.12.2007 в 13:54)   письмо автору
 
   для: kasmanaft   (04.12.2007 в 12:06)
 

если пропадут идеи, то можно посмотреть на уже готовый скрипт для проверки синтаксиса :)

http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования