返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP7 preg_replace 出错及解决办法
  • 397
分享到

PHP7 preg_replace 出错及解决办法

PHP7preg_replace 2015-08-23 05:08:02 397人浏览
摘要

问题描述:PHP7废弃了preg_replace?原本是中php5中处理url中后面参数替换清除的,代码如下$url = preg_replace('/([&])src=[^&]+(&)/e', '"$2"=="""":"$1"', $url);但是到php7

问题描述:

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 ...
    227
    2023-03-22
    PHP7操作MongoDB
  • php7安装mysqli实例讲解
    在本篇文章里小编给大家整理的是一篇关于php7安装mysqli实例讲解内容,有需的朋友们可以跟着学习参考下。 ...
    657
    2023-03-22
    php7 mysqli
  • linux安装php7的方法详解
    linux如何安装php7?1、安装依赖包yum install -y gcc gcc-c++ make zlib zlib-devel pcre pcre-devel libjpeg libjpeg-devel libpng l ...
    363
    2023-03-22
    linux php7
  • 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即可。 ...
    444
    2023-03-22
    端口号 PHP7
  • 如何使用PHP7的Yaconf
    Yaconf是一个高性能的PHP配置容器, 它在PHP启动的时候把格式为INI的配置文件Parse后存储在PHP的常驻内存中,不需要每次请求的时候都来分析配置文件,并且在获取配置项的时候"zero-copy"。 ...
    600
    2023-03-22
    php yaconf
  • 3.安装PHP5和PHP7
    [toc]11.10~11.2 安装PHP51.下载PHP5安装包并解压[root@xavi ~]#cd /usr/local/src/[root@xavi src]# wget http://cn2.php.net/distribut ...
    563
    2023-03-22
  • LAMP(3)安装PHP5、安装PHP7
    安装PHP5(目前很多的企业仍然是使用PHP5,因为考虑到兼容的问题)1.先进入到 /usr/local/src目录(因为我把下载的包都统一放在这里)cd /usr/local/src2.下载包: wget http://cn2.php.n ...
    729
    2023-03-22
    LAMP
  • php7没有php oci8吗
    php7没有oci8,需要安装配置,php7安装oci8扩展的方法是:1、下载并安装“oracle-instantclient19.5-basic-19.5.0.0.0-1.x86_64.rpm”;2、添加环境变量;3、在php官网直接搜oci8;4、通过“pecl install oci8”命令安装oci8即可。 ...
    594
    2023-03-22
    PHP7
  • php7和php5的详细对比
    这篇文章主要介绍了php7和php5详细对比,对此感兴趣的同学,可以自己研究下 ...
    930
    2023-03-22
    php 对比 php7 php5
  • php7 opcache开启不了怎么办
    php7开启opcache的方法:1、在CLI环境下,通过设置“opcache.enable_cli=1”启用opcache;2、通过“opcache.memory_consumption=128”设置opcache共享内存存储大小;3、开启Opcache File Cache,把opcode缓存缓存到外部文件中;4、重启php-fpm即可。 ...
    741
    2023-03-22
    opcache PHP7
  • centos安装php5、卸载php、安装php7的教程
    首先安装php5很简单yum install php然后如果不想用php5的话那就卸载吧 注意只使用yum removHsyzte命令是行不通的那我们先yum remove php然后你需 ...
    946
    2023-03-22
    centos安装php centos 卸载php
  • php7中停止php-fpm服务的方法详解
    这篇文章主要给大家介绍了关于php7中如何停止php-fpm服务的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 ...
    564
    2023-03-22
    php-fpm服务 php服务 启动php-fpm服务器
  • docker怎么自定义镜像构建php7
    这篇文章主要讲解了“docker怎么自定义镜像构建php7”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“docker怎么自定义镜像构建php7”吧!首先进行简单的docker安装。要进行自定 ...
    762
    2023-03-22
    docker php
  • php7没有phpize的解决方法
    在本篇文章里小编给大家分享的是一篇关于php7没有phpize的解决方法及相关问题总结,有需要的朋友们可以跟着学习下。 ...
    166
    2023-03-22
    php7 phpize
  • php7 修改时区无效怎么办
    php7修改时区无效的解决办法:1、从代码中动态修改时区,从而获取到指定时区;2、修改“date.timezone”,其修改内容为“;Defines the default timezone used by the date functions; http://php.net/date.timezone date.timezone =PRC”。 ...
    498
    2023-03-22
    时区 PHP7
  • php5.6和php7的区别是什么
    php5.6和php7的区别:1、php7中新增了函数的返回类型声明;2、php7中新增了标量类型声明;3、php7中新增了匿名类;4、php7移除了一些不再支持的SAPI和拓展。 ...
    354
    2023-03-22
    PHP
  • php7怎么将字符串转为数组
    转换方法:1、用str_split(),语法“str_split(str,length)”;2、用explode(),语法“explode(separator,str,limit)”;3、用强制转换,语法“(array)string”。 ...
    711
    2023-03-22
    php 字符串转数组
  • 浅析PHP7中匿名类的使用方法
    在PHP7之后,PHP中加入了匿名类的特性。匿名类和匿名方法让PHP成为了更现代化的语言,也让我们的代码开发工作越来越方便。下面本篇文章就来简单带大家了解一下PHP7 匿名类的用法,希望对大家有所帮助!匿名类就像一个没有事先定义的类,而在定义的时候直接就进行了实例化。 // 直接定义$objA = new class{public function getName(){ech ...
    804
    2023-03-22
    PHP7 php 匿名类
  • php7连接mongodb,批量添加数据
    1.创建index.php文件,代码如下?php// 1.创建数据库连接对象$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");// 2.向数据库批 ...
    285
    2023-03-22
    php7 mongodb 批量添加数据
  • php7连接mysql失败怎么办
    php7连接mysql失败是因为php7已经摒弃了mysql_connect函数,其解决办法:1、使用mysqli_connect()函数连接;2、使用面向对象的方法连接mysql。 ...
    787
    2023-03-22
    php7
热门问答
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作