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

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

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

 

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

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

тема: Парсинг, текст+скрипт
 
 автор: DJ Paltus   (11.03.2009 в 16:12)   письмо автору
 
 

Дано:
есть код страницы, который в базе хранится,
в нем ссылка на скрипт местится,
регвыром оттуда достается и в массив кладется.

Вот так примерно выглядит текст в базе:

<h1>Заголовок</h1>
Немного текста
<div>[[script]]</div>
Еще немного текста, [[script2]] и до свидания!


Вот так достается и в массив кладется:

<?
$GrabStart 
"\[\[";
                
$GrabEnd "\]\]";
                if(
preg_match_all("|$GrabStart(.*?)$GrabEnd|is"$text$DataPrint)){
                    unset(
$DataPrint[0]);
                foreach(
$DataPrint as $rez)
                    foreach(
$rez as $rezult){
                    if (
is_file("scripts/".$rezult.".php")) include("scripts/".$rezult.".php"); else print "<br><b>No file:</b> ".$rezult;
                    }
                  }
?>

То есть, в коде обнаружив нечто, заключенное в двойные квадратные скобки, парсер должен сходить в специальную директорию за соответствующим скриптом.

А как сделать, чтобы он заодно в тот же массив клал все остальное, то есть делал:

0 => <h1>Заголовок</h1>Немного текста<div>
1=>[[script]]
2=></div>Еще немного текста,
3=>[[script2]]
4=>и до свидания!

чтобы, стало быть, выдавать весь код страницы с вкраплениями скриптов?

Ну или подскажите, плиз, лёгкий способ парсить код , чтобы не изобретать велосипед...

  Ответить  
 
 автор: DJ Paltus   (12.03.2009 в 17:04)   письмо автору
 
   для: DJ Paltus   (11.03.2009 в 16:12)
 

Я попробовал еще 150 раз. Не регвырный я человек!
По мо ги те!!!

  Ответить  
 
 автор: cheops   (12.03.2009 в 19:57)   письмо автору
 
   для: DJ Paltus   (11.03.2009 в 16:12)
 

Так не пойдет... Пойдет как-то так, при условии, что во всех включаемых скриптах вы информацию будете выводить не echo, а в переменную $out (в крайнем случае вывод echo можно перехватить при помощи функций управления выводом)
<?php
  $text 
"<h1>Заголовок</h1> 
Немного текста 
<div>[[script]]</div> 
Еще немного текста, [[script2]] и до свидания!"
;

  
$GrabStart "\[\["
  
$GrabEnd "\]\]"
  
$text preg_replace_callback("|$GrabStart(.*?)$GrabEnd|is""replace_function"$text);
  echo 
$text;

  function 
replace_function($DataPrint)
  { 
    if(!empty(
$DataPrint[1]))
    {
      if (
is_file("scripts/".$DataPrint[1].".php"))
      {
        
// В скриптах всю информацию помещать в эту переменную
        
$out "";
        include(
"scripts/".$DataPrint[1].".php");
        
// Сейчас $out должен быть заполнен
        
return $out;
      }
      else return 
"<br><b>No file:</b> ".$DataPrint[1]; 
    } 
  } 
?>

PS Кстати опасный подходец, если на сайте будет хоть одна XSS-инъекция на сервере можно будет выполнять произвольный PHP-код. В любом случае, я бы рекомендовал вместо .*?, какое-то более жесткое условие, например, буквы и цифры и ничего более - это исправило бы ситуацию.

  Ответить  
 
 автор: DJ Paltus   (13.03.2009 в 12:26)   письмо автору
 
   для: cheops   (12.03.2009 в 19:57)
 

Вот ведь спасибо! )
Я верил в помощь, что придет она!

"|$GrabStart([a-zA-Z0-9_]*?)$GrabEnd|is" - это ведь верный регвыр для латинских букв, арабских цифр и подчеркивания и никаких гвоздей? В смысле, оно уже работает, но не пропустили ли чего лишнего?

  Ответить  
 
 автор: cheops   (14.03.2009 в 14:27)   письмо автору
 
   для: DJ Paltus   (13.03.2009 в 12:26)
 

>В смысле, оно уже работает, но не пропустили ли чего лишнего?
Да.

  Ответить  
Rambler's Top100
вверх

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