PHP7 preg_replace 出错及解决办法

 更新时间:2022-01-27 14:12:16   作者:佚名   我要评论(0)

问题描述:
PHP7废弃了preg_replace?
原本是中php5中处理url中后面参数替换清除的,代码如下


$url = preg_replace('/([?&])src=[^&]+

问题描述:

PHP7废弃了preg_replace?

原本是中php5中处理url中后面参数替换清除的,代码如下

$url = preg_replace('/([?&])src=[^&]+(&?)/e', '"$2"==""?"":"$1"', $url);

但是到php7中就报错了

需要用preg_replace_callback来替换,请问该咋办?

相关代码

$url = preg_replace('/([?&])src=[^&]+(&?)/e', '"$2"==""?"":"$1"', $url);

问题分析:

e 修饰符因为存在安全隐患 自 5.3 开始就已经标记为了待移除的内容。

转而接替的是 preg_replace_callback,此方法第二个参数为一个回调函数,回调函数会自动传入比配的分组作为参数。在回调函数内部通过数组下标访问匹配组。(手机码字 未格式化代码)

preg_replace_callback('/([?&])src=[^&]+(&?)/', function($matches){
    return $matches[2]==""?"":$matches[1];
}, $url);

知识点扩展:

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(\"\n\", substr_count('\\0', \"\n\")) .'"
. $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);

到此这篇关于PHP7 preg_replace 出错及解决办法的文章就介绍到这了,更多相关PHP7 preg_replace 使用出错内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • PHP正则表达式函数preg_replace用法实例分析
  • 深入研究PHP中的preg_replace和代码执行
  • PHP中一个有趣的preg_replace函数详解
  • PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析

相关文章

  • PHP7 preg_replace 出错及解决办法

    PHP7 preg_replace 出错及解决办法

    问题描述: PHP7废弃了preg_replace? 原本是中php5中处理url中后面参数替换清除的,代码如下 $url = preg_replace('/([?&])src=[^&]+
    2022-01-27
  • php实现ffmpeg处理视频的实践

    php实现ffmpeg处理视频的实践

    最近有一个项目需要使用ffmpeg处理视频,这里我写了一个demo,方便我们来实现视频操作 ffmpeg操作demo <&#63;php namespace common\helpe
    2022-01-27
  • php7 没有phpize的解决方法

    php7 没有phpize的解决方法

    本文操作环境:ubuntu 16.04系统、PHP7.0版、DELL G3电脑 php7 没有phpize怎么办? ubuntu服务器下php7没有phpize文件解决方案 第一种: s
    2022-01-27
  • php缓存的类型总结及用法

    php缓存的类型总结及用法

    一个网站或者一个应用的标准流程是浏览器向应用服务器发出请求,应用服务器做一些计算和逻辑判断之后再请求数据库,数据库收到请求后在经过计
    2022-01-27
  • php中cookie与session的区别点总结

    php中cookie与session的区别点总结

    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑 无论是在系统运维还是 PHP 开发人员的面试中,经常会被问到 Session 和 Cookie 在 PH
    2022-01-27
  • PHP中最低级别的错误类型总结

    PHP中最低级别的错误类型总结

    序言:php错误就是会使脚本运行不正常的情况。 php的错误有很多种,包括warning、notice、deprecated、fetal error等。其中notice不叫通知,
    2022-01-27
  • ThinkPHP6.0前置、后置中间件区别

    ThinkPHP6.0前置、后置中间件区别

    目录1. 创建中间件2. 注册中间件3. 前置、后置中间件4. 前置、后置中间件的区别5. 后置中间件登录拦截器(不推荐)6. 前置中间件登录拦截器(
    2022-01-27
  • Vue3如何理解ref toRef和toRefs的区别

    Vue3如何理解ref toRef和toRefs的区别

    目录一、基础1.ref 2.toRef3.toRefs4.最佳的使用方式二、深入1.为什么需要ref2.ref为什么需要.value3.为什么需要toRef和toRefsVue3中新增了
    2022-01-27
  • JavaScript实现酷炫的鼠标拖尾特效

    JavaScript实现酷炫的鼠标拖尾特效

    看完这个保证你有手就行,制作各种好看的小尾巴! 全部代码如下,看注释可以轻易看懂 <!DOCTYPE html> <html lang="en"> <head> <meta c
    2022-01-27
  • Vue?h函数的使用详解

    Vue?h函数的使用详解

    目录一、认识二、使用1、h() 参数2、简单的使用3、实现一个计数器案例4、函数组件和插槽的使用三、jsx的使用1、jsx的认识2、下载Babel插件支
    2022-01-27

最新评论