php7 preg replace e,[PHP] PHP7已经删除了preg_replace的e修饰符

官网提示是这样的,对/e修饰符的支持已删除。请改用preg_replace_callback()

原因是/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后),会被一句话后门使用

看看smarty中是也是这样用的,也是存在问题

$source_content = preg_replace($search."e", """

. $this->_quote_replace($this->left_delimiter) . "php"

. "" . str_repeat("

", substr_count("\0", "

")) .""

. $this->_quote_replace($this->right_delimiter)

. """

, $source_content);

可以把smarty模板修改成这个

$source_content = preg_replace_callback($search, function ($matches){

$str="";

$str.=$this->_quote_replace($this->left_delimiter) . "php";

$str.=str_repeat("\n\", substr_count($matches[1], "\n\"));

$str.=$this->_quote_replace($this->right_delimiter);

return $str;

}, $source_content);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值