网站建设
移动互联网
品牌设计
创新应用
新闻动态
网站百科
简体

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

时间:2014-05-29 来源:尚品中国 类型:网站百科
字号:   

现在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了。

本文发布于尚品中国 网站制作公司


您好,现在就与尚品客服交流

专业网站建设 | 大型网站开发 | 营销网站建设 | APP开发等业务

您可以直接电话快速沟通

北京专线:010-60259772(总部)

天津专线:022-58793660

假日热线:010-60255689

北京地区微信

天津地区微信

快速在线提交需求

请输入您的姓名(尚品将对您的联系方式严格保密)

请输入您的联系电话或微信号

免责声明

非常感谢您访问我们的网站。在您使用本网站之前,请您仔细阅读本声明的所有条款。

1、本站部分内容来源自网络,涉及到的部分文章和图片版权属于原作者,本站转载仅供大家学习和交流,切勿用于任何商业活动。

2、本站不承担用户因使用这些资源对自己和他人造成任何形式的损失或伤害。

3、本声明未涉及的问题参见国家有关法律法规,当本声明与国家法律法规冲突时,以国家法律法规为准。

4、如果侵害了您的合法权益,请您及时与我们,我们会在第一时间删除相关内容!

联系方式:010-60255689
邮件:394588593@qq.com