PHP7 preg_replace 出错及解决办法

问题描述:

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 使用出错内容请搜索编程界以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程界!

--结束END--

本文标题: PHP7 preg_replace 出错及解决办法

本文链接: https://www.lsjlt.com/news/39.html (转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢

  • PHP7操作MongoDB

    目录插入数据查询数据更新数据删除数据PHP7里面使用如下库,操作比较复杂PHP7连接MongoDB语法如下://参数规则: mongodb://账号:密码@IP:端口/数据库$manager = new MongoDBDriverManager("mongod
    阅读数:225 PHP7操作MongoDB
  • php7怎么安装fileinfo扩展

    php7安装fileinfo扩展的方法:1、下载并安装php7;2、进入PHP7安装目录下,打开配置文件“php.ini”;3、在配置文件中,添加“extension=fileinfo.so;”代码,并保存文件;4、重启php即可。
    阅读数:169 php7 fileinfo扩展
  • linux安装php7的方法详解

    linux如何安装php7?1、安装依赖包yum install -y gcc gcc-c++ make zlib zlib-devel pcre pcre-devel libjpeg libjpeg-devel libpng l
    阅读数:363 linux php7
  • 如何使用PHP7的Yaconf

    Yaconf是一个高性能的PHP配置容器, 它在PHP启动的时候把格式为INI的配置文件Parse后存储在PHP的常驻内存中,不需要每次请求的时候都来分析配置文件,并且在获取配置项的时候"zero-copy"。
    阅读数:584 php yaconf
  • php7怎么修改端口号

    php7修改端口号的方法:1、通过“vim /usr/local/php7/etc/php-fpm.d/www.conf listen = 0.0.0.0:9000”方式修改php7端口号;2、通过“/usr/local/php7/sbin/php-fpm”启动php即可。
    阅读数:437 端口号 PHP7
  • php7和php5的详细对比

    这篇文章主要介绍了php7和php5详细对比,对此感兴趣的同学,可以自己研究下
    阅读数:930 php 对比 php7 php5
  • centos安装php5、卸载php、安装php7的教程

    首先安装php5很简单yum install php然后如果不想用php5的话那就卸载吧 注意只使用yum removHsyzte命令是行不通的那我们先yum remove php然后你需
    阅读数:928 centos安装php centos 卸载php
  • php7与php5的区别是什么

    php7与php5的区别:1、php7移除了不再支持的SAPI;2、php7新增了空接合操作符;3、php7增加了结合比较运算符;4、php 7增加了函数的返回类型声明。
    阅读数:689 php 7 php 5 区别
  • php7中停止php-fpm服务的方法详解

    这篇文章主要给大家介绍了关于php7中如何停止php-fpm服务的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • docker怎么自定义镜像构建php7

    这篇文章主要讲解了“docker怎么自定义镜像构建php7”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“docker怎么自定义镜像构建php7”吧!首先进行简单的docker安装。要进行自定
    阅读数:758 docker php
  • php7 修改时区无效怎么办

    php7修改时区无效的解决办法:1、从代码中动态修改时区,从而获取到指定时区;2、修改“date.timezone”,其修改内容为“;Defines the default timezone used by the date functions; http://php.net/date.timezone date.timezone =PRC”。
    阅读数:496 时区 PHP7
  • php7没有phpize的解决方法

    在本篇文章里小编给大家分享的是一篇关于php7没有phpize的解决方法及相关问题总结,有需要的朋友们可以跟着学习下。
    阅读数:165 php7 phpize
  • php5.6和php7的区别是什么

    php5.6和php7的区别:1、php7中新增了函数的返回类型声明;2、php7中新增了标量类型声明;3、php7中新增了匿名类;4、php7移除了一些不再支持的SAPI和拓展。
    阅读数:333 PHP
  • php7怎么将字符串转为数组

    转换方法:1、用str_split(),语法“str_split(str,length)”;2、用explode(),语法“explode(separator,str,limit)”;3、用强制转换,语法“(array)string”。
    阅读数:705 php 字符串转数组
  • 浅析PHP7中匿名类的使用方法

    在PHP7之后,PHP中加入了匿名类的特性。匿名类和匿名方法让PHP成为了更现代化的语言,也让我们的代码开发工作越来越方便。下面本篇文章就来简单带大家了解一下PHP7 匿名类的用法,希望对大家有所帮助!匿名类就像一个没有事先定义的类,而在定义的时候直接就进行了实例化。 // 直接定义$objA = new class{public function getName(){ech
    阅读数:796 PHP7 php 匿名类
  • php7连接mongodb,批量添加数据

    1.创建index.php文件,代码如下?php// 1.创建数据库连接对象$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");// 2.向数据库批
    阅读数:238 php7 mongodb 批量添加数据
  • php7连接mysql失败怎么办

    php7连接mysql失败是因为php7已经摒弃了mysql_connect函数,其解决办法:1、使用mysqli_connect()函数连接;2、使用面向对象的方法连接mysql。
    阅读数:771 php7
  • 详细分析PHP7与PHP5区别

    这篇文章主要介绍了详细分析PHP7与PHP5区别,一步步通过问题和代码实例去进行描述两个版本的区别,需要的朋友可以参考下
  • CentOS 6/7环境下通过yum安装php7的方法

    本文实例讲述了CentOS 6/7环境下通过yum安装php7的方法。分享给大家供大家参考,具体如下:安装php7已经是现在linux服务器必备的一款工具了,只要做网站都会考虑到使用php7了,下面我们来看Centos 6/ 7下通过yu
    阅读数:916 CentOS 6 CentOS7 yum 安装php7
  • shell脚本一键安装php7的实例(推荐)

    如下所示:#!/bin/bashphp_gz_file='/home/php/Downloads/source/php-7.0.0.tar.bz2'tar_dir='/home/php/Downloads/dst/'source_dir
    阅读数:651 一键 脚本 实例