PHP在preg_replace上崩溃

我使用PHP.exe运行以下脚本:

preg_replace('#(?:^[^\pL]*)|(?:[^\pL]*$)#u','',$string);

或其等价物

preg_replace('#(?:^[^\pL]*|[^\pL]*$)#u','',$string);

如果$ string =“S”或$ string =“ذذ”它可以工作,如果string =’ذ’它会产生 是不正确的,如果string =’ذذ’PHP崩溃。

但它在4.4.0 – 4.4.9,5.0.5 – 5.1.6版本中起作用。

哪里不对 ?

见:http://3v4l.org/T3rpV

<?php
$string='دد';
echo preg_replace('#(?:^[^\pL]*)|(?:[^\pL]*$)#u','',$string);

Output for 5.4.0 – 5.5.0alpha6

06003

Output for 5.2.0 – 5.3.22, 5.5.0beta1

 

Output for 4.4.0 – 4.4.9, 5.0.5 – 5.1.6

06004

Output for 4.3.11, 5.0.0 – 5.0.4

06005

Output for 4.3.0 – 4.3.10

06006

您可以使用替代的mb_ereg_replace()函数:

mb_internal_encoding("UTF-8");
mb_regex_encoding("UTF-8");
echo mb_ereg_replace('#(?:^[^\pL]*)|(?:[^\pL]*$)#u','',$string);

转载注明原文:PHP在preg_replace上崩溃 - 代码日志