PHP preg_replace 标题(non-english 个字符)清理 slug 不起作用

PHP preg_replace title(non-english characters) to clean slug not working

我正在尝试将标题变成 slug

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

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

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

再举个例子 标题:Great Britain 鼻涕虫:great-britain

我该如何解决?

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

  • 转义反斜杠匹配模式,即'\\'
  • 删除 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

注意 [={} 在字符 class 中并不特殊,不需要转义。