PHP preg_replace标题(非英语字符)以清除子弹不起作用

时间:2018-10-08 11:02:55

标签: php preg-replace

我正试图将标题变成

$string = "آزمون پادشاهی متحده";
$pattern = '/[`~!@#$%^&*()_|+\=?;:..’“\'"<>,€£¥•،٫؟»«\{\}\[\]\\\/]+/gi';
            $replacement = '';

            $slug = trim(preg_replace($pattern, $replacement, $string));
            $slug = str_replace(" ","-",$slug);

最终结果应该是آزمون-پادشاهی-متحده个空格,并用连字符替换。

另一个例子 标题:Great Britain sl:great-britain

我该如何解决?

1 个答案:

答案 0 :(得分:3)

您需要在此处应用以下修复程序:

  • 转义反斜杠匹配模式,即'\\\\'
  • 删除g修饰符,因为PHP preg_replace不支持该修饰符(默认情况下它将替换输入中所有出现的修饰符)
  • 添加一个u修饰符,以使PCRE引擎能够同时解析模式和输入为Unicode字符串。

使用

$string = "آزمون پادشاهی متحده";
$pattern = '/[`~!@#$%^&*()_|+=?;:..’“\'"<>,€£¥•،٫؟»«{}[\]\\\\\/]+/ui';
$replacement = '';

 $slug = trim(preg_replace($pattern, $replacement, $string));
 $slug = str_replace(" ","-",$slug);
 echo $slug;

请参见PHP demo

请注意,[={}在字符类中不是特殊字符,不需要转义。