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

Форум Регулярные Выражения

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

 

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

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

тема: вопрос по книге пхп5 на примерах
 
 автор: winflip   (19.07.2007 в 09:41)   письмо автору
 
 

у меня почему то не работает собственная функция подсветки пхп кода. пишет чото там с функцией прег реплайс.подскажите плз :-) заранее спасибо

   
 
 автор: kasmanaft   (19.07.2007 в 10:04)   письмо автору
 
   для: winflip   (19.07.2007 в 09:41)
 

Вы бы еще код показыли :))
Хотя бы этот прег_реплайс + по строчке вверх, вниз.

   
 
 автор: cheops   (19.07.2007 в 10:13)   письмо автору
 
   для: winflip   (19.07.2007 в 09:41)
 

Приведите пожалуйста точное сообщение.

   
 
 автор: winflip   (19.07.2007 в 10:54)   письмо автору
 
   для: cheops   (19.07.2007 в 10:13)
 

<?php
function shighlight($document)
{
$document = str_replace("<", "&lt;", $document);
$document = str_replace(">", "&gt;", $document);
$tegs = array("'&lt;\?php'si", "'&lt;\?'si", "'\?&gt;'si");
$replace = array("<font color=#95001E>&lt;?php</font>",
"<font color=#95001E>&lt;?</font>",
"<font color=#95001E>?&gt;</font>");
$document = preg_replace($tegs, $replace, $document);\\Здесь ошибка
$document = preg_replace("'((?:#|//)[^\n]*|\/*.*?\*/)'si",
"<font color=#244ECC>\\1</font>",
$document);
$document = preg_replace("'(\n)'si","<br>\\1", $document);
$document = preg_replace("'([\w]+)([\s]*)[\(]'si",
"<font color=#0000CC><b>\\1</b></font>\\2(",
$document);
$separator = array("'\,'si",
"'\-'si",
"'\+'si",
"'\('si",
"'\)'si",
"'\{'si",
"'\}'si");
$replace = array("<font color=#1A691A>,</font>",
"<font color=#1A691A>-</font>",
"<font color=#1A691A>+</font>",
"<font color=#1A691A>(</font>",
"<font color=#1A691A>)</font>",
"<font color=#1A691A>{</font>",
"<font color=#1A691A>}</font>");
$document = preg_replace($separator, $replace, $document);
$document = preg_replace("'([\$]{1,2}[A-Za-z_]+)'si",
"<b><font color=#000000>\\1</font></b>",
$document);
$str = array("'(echo)'si",
"'(print)'si",
"'(while)'si",
"'(for)'si",
"'(if)'si",
"'(else)'si",
"'(switch)'si",
"'(function)'si",
"'(array)'si");
$replace = array_fill(0,
count($str),
"<b><font color=#0000CC>\\1</font></b>");
$document = preg_replace($str, $replace, $document);
return "<code>$document</code>";
}
?>

   
 
 автор: winflip   (19.07.2007 в 10:55)   письмо автору
 
   для: cheops   (19.07.2007 в 10:13)
 


<?php
 
function shighlight($document)
 {
  
$document str_replace("<""&lt;"$document);
  
$document str_replace(">""&gt;"$document);
  
$tegs = array("'&lt;\?php'si""'&lt;\?'si""'\?&gt;'si");
  
$replace = array("<font color=#95001E>&lt;?php</font>",
                   
"<font color=#95001E>&lt;?</font>",
                   
"<font color=#95001E>?&gt;</font>");
  
$document preg_replace($tegs$replace$document);\\Здесь ошибка
  $document 
preg_replace("'((?:#|//)[^\n]*|\/*.*?\*/)'si",
                           
"<font color=#244ECC>\\1</font>",
                            
$document);
  
$document preg_replace("'(\n)'si","<br>\\1"$document);
  
$document preg_replace("'([\w]+)([\s]*)[\(]'si",
                           
"<font color=#0000CC><b>\\1</b></font>\\2(",
                           
$document);
  
$separator = array("'\,'si",
                     
"'\-'si",
                     
"'\+'si",
                     
"'\('si",
                     
"'\)'si",
                     
"'\{'si",
                     
"'\}'si");
  
$replace = array("<font color=#1A691A>,</font>",
                   
"<font color=#1A691A>-</font>",
                   
"<font color=#1A691A>+</font>",
                   
"<font color=#1A691A>(</font>",
                   
"<font color=#1A691A>)</font>",
                   
"<font color=#1A691A>{</font>",
                   
"<font color=#1A691A>}</font>");
  
$document preg_replace($separator$replace$document);
  
$document preg_replace("'([\$]{1,2}[A-Za-z_]+)'si",
                           
"<b><font color=#000000>\\1</font></b>",
                           
$document);
  
$str = array("'(echo)'si",
               
"'(print)'si",
               
"'(while)'si",
               
"'(for)'si",
               
"'(if)'si",
               
"'(else)'si",
               
"'(switch)'si",
               
"'(function)'si",
               
"'(array)'si");
  
$replace array_fill(0,
                        
count($str),
                        
"<b><font color=#0000CC>\\1</font></b>");
  
$document preg_replace($str$replace$document);
  return 
"<code>$document</code>";
 }
?>

   
 
 автор: kasmanaft   (19.07.2007 в 11:48)   письмо автору
 
   для: winflip   (19.07.2007 в 10:55)
 

Мммм.... если убрать слова "Здесь ошибка" - все работает :rolleyes:
Какая у Вас ошибка выводится?

   
 
 автор: winflip   (19.07.2007 в 12:01)   письмо автору
 
   для: kasmanaft   (19.07.2007 в 11:48)
 

если присвоить переменной документ код пхп то он не выводится

   
 
 автор: kasmanaft   (19.07.2007 в 12:52)   письмо автору
 
   для: winflip   (19.07.2007 в 12:01)
 

Вот так надо пользоваться:

<?php
. . . . .
$document '<?php echo "bla bla bla"; ?>';
echo 
shighlight($document);

Переменную не обязательно обзывать $document - почитайте про функции и область видимости переменных.

зыж не понятно только, как такой скрипт мог попасть в книги (тоже самое и в "головоломках"), если он некорректно обрабатывает даже '<?php echo "bla bla bla"; ?>' ? Кабута даже не проверили :))

http://softtime.ru/forum/read.php?id_forum=1&id_theme=6140
автор: cheops (09.08.2005 в 01:35) :-)

   
 
 автор: winflip   (19.07.2007 в 13:04)   письмо автору
 
   для: kasmanaft   (19.07.2007 в 12:52)
 

а я ретурном выводил. спасибо

   
 
 автор: winflip   (19.07.2007 в 13:07)   письмо автору
 
   для: winflip   (19.07.2007 в 13:04)
 

только он чото выводит еще #95001е

   
 
 автор: winflip   (19.07.2007 в 17:43)   письмо автору
 
   для: winflip   (19.07.2007 в 13:07)
 

космонавт не подскажешь

   
 
 автор: kasmanaft   (19.07.2007 в 18:00)   письмо автору
 
   для: winflip   (19.07.2007 в 17:43)
 

Так происходит вот почему:
Сначала "<?php" преобразуется в "&lt;php". Замем оно подсвечивается
<font color=#95001E>&lt;?php</font>
После этого закрашиваются коментарии (однострочные "//" и "#" и многострочные "/* ... */")
Считается что все, что начинается с "#" - коментарий. Смотрим чуть выше... "<font color=#95001E>" - скрипт думает, что тут тоже содержется коментарий.

Можно поменять строки местами и все будет нормально:

  $document = preg_replace("'((?:#|//)[^\n]*|\/\*.*?\*/)'si", 
                           "<font color=#244ECC>\\1</font>", 
                            $document);
  $document = preg_replace($tegs, $replace, $document);


Всё же это демонстрационный скрипт.. для книги... Много мелочей нужно учитывать, что сделать очень не просто.

   
Rambler's Top100
вверх

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