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 中并不特殊,不需要转义。
我正在尝试将标题变成 slug
$string = "آزمون پادشاهی متحده";
$pattern = '/[`~!@#$%^&*()_|+\=?;:..’“\'"<>,€£¥•،٫؟»«\{\}\[\]\\/]+/gi';
$replacement = '';
$slug = trim(preg_replace($pattern, $replacement, $string));
$slug = str_replace(" ","-",$slug);
最终结果应该是 آزمون-پادشاهی-متحده
个空格被连字符替换。
再举个例子
标题:Great Britain
鼻涕虫:great-britain
我该如何解决?
您需要在此处应用以下修复程序:
- 转义反斜杠匹配模式,即
'\\'
- 删除
g
修饰符,因为 PHPpreg_replace
不支持它(它默认替换输入中的所有匹配项) - 添加
u
修饰符以使 PCRE 引擎能够将模式和输入解析为 Unicode 字符串。
使用
$string = "آزمون پادشاهی متحده";
$pattern = '/[`~!@#$%^&*()_|+=?;:..’“\'"<>,€£¥•،٫؟»«{}[\]\\\/]+/ui';
$replacement = '';
$slug = trim(preg_replace($pattern, $replacement, $string));
$slug = str_replace(" ","-",$slug);
echo $slug;
参见PHP demo。
注意 [
、=
、{
和 }
在字符 class 中并不特殊,不需要转义。