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

Форум PHP

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

 

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

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

тема: Подсветка кода
 
 автор: Lelik   (13.08.2006 в 21:10)   письмо автору
 
 

Вынимаю данные из ББ-тегов

preg_match_all("|\[code\]([^\[]*)\[\/code\]|isU", $theme, $oute);
        foreach($oute[1] as $val)
           {
              $theme = str_replace('[code]','',$theme);
              $theme = str_replace('[\/code]','',$theme);
              $theme = str_replace($val,
                                   '<table class="txt_tab" width="80%" align="center" boder="0" bgcolor="#ACACAC">
                                    <tr valign="top"><td>'.highlight_string("$val").'</td>
                                    </tr></table>', $theme);
           }

только, чего-то у меня вывод инфы не правильный

   
 
 автор: BAHO   (13.08.2006 в 21:43)   письмо автору
 
   для: Lelik   (13.08.2006 в 21:10)
 

попробуйте регу:
preg_match_all("|\[code\](.+?)\[\/code\]|is", $theme, $oute);

   
 
 автор: Lelik   (13.08.2006 в 23:06)   письмо автору
 
   для: BAHO   (13.08.2006 в 21:43)
 

не та рега не пркатила.

А вообще вывод инфы такой. На простое РНР выражение

<?php
echo "Hello world!";
?>


выводит такое

&lt;?php 
echo &quot;Hello World!&quot;; 
?&gt; 

<?php
echo "Hello World!";
?>


Причем там где заменены угловые скобки и кавычки - код с подсветкой, но все это без серого фона таблицы, как должно быть

   
 
 автор: BAHO   (13.08.2006 в 23:20)   письмо автору
 
   для: Lelik   (13.08.2006 в 23:06)
 

а так:


preg_match_all("|\[code\]([^\[]*)\[\/code\]|isU", $theme, $oute); 
        foreach($oute[1] as $val) 
           { 
              $val= highlight_string($val); 
              $theme = str_replace('[code]','',$theme); 
              $theme = str_replace('[\/code]','',$theme); 
              $theme = str_replace($val, 
                                   '<table class="txt_tab" width="80%" align="center" boder="0" bgcolor="#ACACAC"> 
                                    <tr valign="top"><td>'.$val.'</td> 
                                    </tr></table>', $theme); 
           } 

   
 
 автор: Lelik   (13.08.2006 в 23:24)   письмо автору
 
   для: BAHO   (13.08.2006 в 23:20)
 

не так тоже не катит - я проверял и не один раз :(

   
 
 автор: BAHO   (14.08.2006 в 01:22)   письмо автору
 
   для: Lelik   (13.08.2006 в 23:24)
 

а может где то перед этим htmspecialchars прошёлся?

   
 
 автор: Lelik   (14.08.2006 в 01:22)   письмо автору
 
   для: BAHO   (14.08.2006 в 01:22)
 

ага

   
 
 автор: Lelik   (14.08.2006 в 01:36)   письмо автору
 
   для: Lelik   (14.08.2006 в 01:22)
 

а с испоьзованием htmlsprcialchars нельзя сделать?

   
 
 автор: Lelik   (14.08.2006 в 19:08)   письмо автору
 
   для: Lelik   (14.08.2006 в 01:36)
 

Применил такой код

<?php
preg_match_all
("|\[code\](.+?)\[\/code\]|is"$theme$oute);
        foreach(
$oute[1] as $val)
           {                                                                 
              
$theme str_replace('[code]','',$theme);
              
$theme str_replace('[\/code]','',$theme);
              
$valstripslashes($val);
              if(!
strpos($val,"<?") && substr($val,0,2)!="<?")
                 {
                    
$val="<?php\n".trim($val)."\n?>";
                 }
              
$val trim($val);
              
$theme str_replace($val,
                                   
'<table class="txt_tab" width="80%" align="center" boder="0" bgcolor="#ACACAC">
                                    <tr valign="top"><td>'
.highlight_string($valtrue).'</td>
                                    </tr></table>'
$theme);
           }
?>

выводится только строка записанная меж тего код без подсветки и без фона таблицы

   
 
 автор: Lelik   (15.08.2006 в 01:19)   письмо автору
 
   для: Lelik   (14.08.2006 в 19:08)
 

Люди, что никто не поможет?...

   
 
 автор: Trianon   (15.08.2006 в 09:31)   письмо автору
 
   для: Lelik   (15.08.2006 в 01:19)
 

"Помоги себе сам!": htmlspecialchars делается непосредственно перед выводром в браузер.

   
 
 автор: Lelik   (15.08.2006 в 14:43)   письмо автору
 
   для: Trianon   (15.08.2006 в 09:31)
 

но ведь я в предыдущем примере привел код с этого сайта из статьи о подсветке кода - там вроде анулируется дествие htmlspecialchers.

   
 
 автор: cheops   (16.08.2006 в 12:21)   письмо автору
 
   для: Lelik   (15.08.2006 в 14:43)
 

Обычно код вообще не подвергают обработке htmlspecialchers(), а помещают в тэги <pre></pre>, чтобы он выводился как есть. А обрабатывают htmlspecialchers() всё вне кода.

   
 
 автор: Lelik   (16.08.2006 в 15:20)   письмо автору
 
   для: cheops   (16.08.2006 в 12:21)
 

а как это сделать - не подвергать обработке htmlspecialchers() код(???), - я чет не догоняю. Просто у меня одна функция все ББ теги трансформирует

   
 
 автор: cheops   (16.08.2006 в 22:39)   письмо автору
 
   для: Lelik   (16.08.2006 в 15:20)
 

Мы для этого используем следующий код
<?php
    $text 
"[code]";
    
$lastocc 0;
    
$sndocc 1;
    
$result "";
    while(
$sndocc)
    {
      
$fstocc strpos($postbody,"[code]",$lastocc);
      
$sndocc strpos($postbody,"
",$fstocc);
if(($fstocc>0 && $sndocc>0 && $lastocc>0) || ($fstocc >= 0 && $sndocc>0 && $lastocc == 0))
{
$result .= nl2br(htmlspecialchars(substr($postbody,$lastocc,$fstocc - $lastocc)));
$result .= "<table border=0 ><tr><td class=codeblock>" .
highlight_string(substr($postbody,$fstocc + 6,$sndocc - $fstocc - 6),true)."</td></tr></table>";
$lastocc = $sndocc + 7;
}
else
{
$result .= nl2br(htmlspecialchars(substr($postbody,$lastocc,strlen($postbody)-$lastocc)));
break;
}
}
$postbody = $result;

?>[/code]
но можно использовать и другие средствам, например, регулярные выражения.

   
Rambler's Top100
вверх

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