国内领先的企业通信解决方案服务商专业提供平价宽带,平价固话,平价项目工程方案!
“我们业务范围:光纤宽带,IP城域网,无线固话,有线固话,网络固话,固话靓号,综合布线,200IP业务,电子群真等,业务电话:4008-528-159”

全部 综合网络技术 常见电话故障 宽带常见问题 业务综合问题 常用技术文章 产品参数文章
首页 > 帮助中心 > preg_replace()用preg_replace_callback()函数来替换

preg_replace()用preg_replace_callback()函数来替换

类别: 常用技术文章    来源:www.nanyuetong.com
摘要:现在PHP5.5版本出来了,我装了一下改动还真不小,咱们用的smarty居然不兼容了,一运行出现以下错误:   意思是说用preg_...
现在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了。

收藏本页】 【返回顶部】 【关闭窗口

将该资讯分享至:
回顶部 
官方微信