首页 > 新闻 > 知识赋能

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

2014-05-29 5338
分享至:
现在PHP5.5版本出来了,我装了一下改动还真不小,咱们用的smarty居然不兼容了,一运行出现以下错误:
 

意思是说用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('', "n")) .'"
. $this->_quote_replace($this->right_delimiter)
. "'"
, $source_content);

替换成:

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

即可,这样就可以完美兼容php5.5了。

本文发布于尚品中国 网站制作公司
来源声明:

本文章系尚品中国编辑原创或采编整理,如需转载请注明来自尚品中国。以上内容部分(包含图片、文字)来源于网络,如有侵权,请及时与本站联系(010-60259772)。

立即预约专属顾问 开启数字化转型之旅!

10年+资深项目经理1V1服务 | 行业定制化方案 | 精准报价体系
获取策划方案
立即预约专属顾问 开启数字化转型之旅!

咨询我们,获得专业的服务和报价

联系我们,免费获取项目方案及报价,或只是聊一聊您的项目? 在收到您的需求留言后我们将由专业人员于24小时内与您取得联系,请您保持电话畅通!

  • 科研院所解决方案
  • 外贸出海解决方案
  • 协会学会解决方案
  • 集团上市公司解决方案
  • 生物医药解决方案
  • 制造业解决方案
  • 高校教育解决方案
  • 信创网站改造解决方案
更多服务咨询,请联系尚品

010-60259772

您的姓名 *
您的电话 *
您的邮箱
公司名称 *