smarty如何完美兼容php5.5和preg_replace_callback如何替換preg_replace

現在PHP5.5版本出來了,我裝了一下改動還真不小,咱們用的smarty居然不兼容了,一運行出現以下錯誤:
preg_replace():
 

意思是說用preg_replace_callback來代替preg_replace裏的/e參數,可能是因爲安全性的考慮,在php5.5中把這個參數取消了,但是這個preg_replace_callback函數用起來不順手,我就把那個Smarty_Compiler.class.php文件裏的第270行裏的preg_replace($search.'e'裏的e去掉了,果然好了,可是問題又出來了,這個問題出來的機率不多,就是無法在smarty模板裏寫入php標籤代碼:{php}{/php}。

沒辦法還是要把這個preg_replace()用preg_replace_callback()函數來替換,具體替換方法如下:

在Smarty_Compiler這個類里加入一個方法:

function callback_source($matches){
return "".$this->_quote_replace($this->left_delimiter)."php".str_repeat("n",substr_count("","n"))."".$this->_quote_replace($this->right_delimiter)."";
}

然後在第270行左右找到:
$source_content = preg_replace($search.'e', "'"
. $this->_quote_replace($this->left_delimiter) . 'php'
. "' . str_repeat("n", substr_count('\0', "n")) .'"
. $this->_quote_replace($this->right_delimiter)
. "'"
, $source_content);

替換成:

$source_content = preg_replace_callback($search,
array("self","callback_source")
, $source_content);

即可,這樣就可以完美兼容php5.5了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章