|
|
|
| Дано:
есть код страницы, который в базе хранится,
в нем ссылка на скрипт местится,
регвыром оттуда достается и в массив кладется.
Вот так примерно выглядит текст в базе:
<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
(11.03.2009 в 16:12)
| | Я попробовал еще 150 раз. Не регвырный я человек!
По мо ги те!!! | |
|
|
|
|
|
|
|
для: 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-код. В любом случае, я бы рекомендовал вместо .*?, какое-то более жесткое условие, например, буквы и цифры и ничего более - это исправило бы ситуацию. | |
|
|
|
|
|
|
|
для: cheops
(12.03.2009 в 19:57)
| | Вот ведь спасибо! )
Я верил в помощь, что придет она!
"|$GrabStart([a-zA-Z0-9_]*?)$GrabEnd|is" - это ведь верный регвыр для латинских букв, арабских цифр и подчеркивания и никаких гвоздей? В смысле, оно уже работает, но не пропустили ли чего лишнего? | |
|
|
|
|
|
|
|
для: DJ Paltus
(13.03.2009 в 12:26)
| | >В смысле, оно уже работает, но не пропустили ли чего лишнего?
Да. | |
|
|
|