zoukankan      html  css  js  c++  java
  • [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);

  • 相关阅读:
    java第四次作业
    java第五次作业
    java第三次作业
    第二次学习笔记
    java学习笔记
    第十四周完成情况
    课程计划进程
    课程设计分工
    JAVA学习笔记(六)
    JAVA学习笔记(五)
  • 原文地址:https://www.cnblogs.com/taoshihan/p/12121457.html
Copyright © 2011-2022 走看看