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出错及解决办法的一些内容说明,希望能对大家有所帮助。