Mal Hack
Guest
preg_replace не отправлет в функию значение.
Доброе время суток.
Очень надеюсь, что кто-ть сталкивался с подобной проблемой и сможет мне чем-то помочь.
Итак. Для большей наглядности приведу пример из хэлпов:
Т.е. тут найденная регом строка передается в другую функцию, где происходит замена.
Вот мой код.
В данном случае preg должен находить: <%TITLE%> или <%CSS%>, например, затем передавать (TITLE или CSS) в метод TMPL_Parser_Static, чтобы там, через другой объект из базы был вынут соответствующий TITLE или CSS текст, и подставлен на место <%TITLE%> или <%CSS%>.
Теперь, опишу в чем заключается трабл...
Если в качестве строки handle, т.е. на что заменять стоит: "\$this -> TMPL_Parser_Static( '\\1' )", т.е. с кавычками по краям и \ перед $, то этот текст TITLE передается, но если мы сделаем так же, как и в примере из хэлпов, т.е. уберем кавычки по краям и \ перед $ в метод TMPL_Parser_Static будет передано строковое значение \1. Пробовал даже и # #si в реге делать все-равно одно и тоже.
В чем дело я понять не могу...
Все-таки мой способ - изврат и лишь обход проблемы, а не ее решение.
Вот тут уже пытался решить данный трабл..
http://forum.woweb.ru/index.php?s=&showtopic=7006
ЗЫ: PHP 4.3.2, на локале на WinXP, Apache 2.0.49.
Заранее спасибо за помощь.
Доброе время суток.
Очень надеюсь, что кто-ть сталкивался с подобной проблемой и сможет мне чем-то помочь.
Итак. Для большей наглядности приведу пример из хэлпов:
PHP:
class myText
{
function replacer($str) {
$pattern = '#(<small[^>]*?'.'>)(.*?)(</small>)#si';
return preg_replace($pattern, $this->replace('$2'), $str);
}
function replace($str) {
echo 'infunc: <span class="small">'.$str.'</span>'."\n";
return '<span class="small">'.$str.'</span>';
}
}
Вот мой код.
PHP:
<?php
class TMPL_Parser
{
var $Main = array();
function TMPL_Parser( $tmpl_content )
{
$this -> Main = explode( "<%FLUSH%>" , $tmpl_content );
for( $i = 0 ; $i < count( $this -> Main ) ; $i++ )
{
$this -> Main[$i] = preg_replace( "/<%(.+?)%>/e" , "\$this -> TMPL_Parser_Static( '\\1' )" , $this -> Main[$i] );
print $this -> Main[$i];
flush();
}
}
function TMPL_Parser_Static( $tmpl )
{
global $DBI;
global $SQL_Global;
$DBI -> SQL_Query( $SQL_Global -> SQL_Global_Query( "get_tmpl_static" , $tmpl ) );
return $DBI -> DataObj[0] -> tmpl_content;
}
}
?>
Теперь, опишу в чем заключается трабл...
Если в качестве строки handle, т.е. на что заменять стоит: "\$this -> TMPL_Parser_Static( '\\1' )", т.е. с кавычками по краям и \ перед $, то этот текст TITLE передается, но если мы сделаем так же, как и в примере из хэлпов, т.е. уберем кавычки по краям и \ перед $ в метод TMPL_Parser_Static будет передано строковое значение \1. Пробовал даже и # #si в реге делать все-равно одно и тоже.
В чем дело я понять не могу...
Все-таки мой способ - изврат и лишь обход проблемы, а не ее решение.
Вот тут уже пытался решить данный трабл..
http://forum.woweb.ru/index.php?s=&showtopic=7006
ЗЫ: PHP 4.3.2, на локале на WinXP, Apache 2.0.49.
Заранее спасибо за помощь.