PHP7preg_replace出错及解决办法

PHP7preg_replace出错及解决办法

1. PHP7中preg_replace出现问题的原因

PHP7版本中preg_replace中的/e模式已经被废弃,而PHP5中是可以使用的。e模式是将替换字符串中需要执行的PHP代码作为eval()函数运行的,如果替换字符串中有非法代码,可能会带来安全风险。所以在PHP7.0.0版本中,e模式已经被标记为deprecated,并在PHP7.0.0以上的版本中废弃。

2. 解决办法

如果想在PHP7中继续使用preg_replace函数的替换功能,可以使用preg_replace_callback函数代替。preg_replace_callback函数的使用方式和preg_replace函数基本一致,只是在替换字符串参数中,需要使用匿名函数或者普通函数代替原来的PHP代码。下面给出一个简单的例子:

$string = 'Hello world!';

$pattern = '/world/';

$replacement = function () {

return 'PHP7';

};

echo preg_replace_callback($pattern, $replacement, $string); //输出Hello PHP7!

在以上示例中,$replacement参数使用了匿名函数,这个匿名函数将会替换$pattern参数匹配到的字符串,将其替换成'PHP7'。

3. 其他替换函数

除了preg_replace_callback函数以外,PHP中还提供了一些其他的替换函数。下面是其中的几个:

(1)str_replace函数

str_replace函数是字符串替换函数,使用方式非常简单,其语法结构如下:

string str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

其中$search参数表示被替换的字符串或者字符数组,$replace参数表示用于替换的字符串或字符数组,$subject参数表示被搜索的主字符串,$count是可选参数,表示替换成功的次数。

(2)preg_replace_callback_array函数

preg_replace_callback_array函数是一种高级替换函数,其使用方式比较复杂,但是可以实现多个不同匹配模式的替换。使用方法如下:

mixed preg_replace_callback_array ( array $patterns_and_callbacks , mixed $subject [, int $limit = -1 [, int &$count ]] )

其中,$patterns_and_callbacks是一个数组,其中每一个元素都是一个关联数组,包含两个键值:pattern和callback,分别对应匹配模式和匹配回调函数。$pattern可以是一个正则表达式,也可以是一个字符串字符,$callback必须是一个有效的回调函数,用于处理匹配到的内容。

(3)strtr函数

strtr函数也是字符串替换函数,但是其使用方式有所不同,其语法结构如下:

strtr ( string $str , array $replace_pairs )

其中,$str参数表示需要进行替换的字符串,$replace_pairs参数是一个关联数组,其中键名表示需要被替换的字符串,键值表示要替换成的字符串。

以上几点就是PHP7preg_replace出错及解决办法的一些内容说明,希望能对大家有所帮助。

后端开发标签