从url中删除特殊字符,但不删除其他语言字符


Remove special characters from a url, but not other language characters

我正在开发一个web应用程序,人们可以在该应用程序中用英语和其他语言发布文章(如论坛)。为了从帖子标题中创建漂亮的永久链接,我使用了这样的代码。

PHP:

$ln=preg_replace("/[^A-Za-z0-9[:space:]]/","",$name);
$ln = strtolower($ln);
$ln=str_replace(' ','-',$ln);

这会删除除字母和数字以外的所有字符。但我也想保留其他语言的单词,比如汉语或印地语。因此,它不会将"स्टैक ओवरफ्लो"剥离为" "。我还找不到任何REGEX解决方案。

[^'p{L} 0-9]

'p{L} matches any kind of letter from any language你可以试试这个。这将保留其他语言中的单词并删除特殊符号。请参阅演示。

https://regex101.com/r/qH1uG3/8

$re = "/[^''p{L} 0-9]/m";
$str = "@#'$#'$sadsadस्टैक ओवरफ्लो";
$subst = "";
$result = preg_replace($re, $subst, $str);

[^'p{L}'p{Z}'p{N}'p{M}]
  • 'p{L}匹配来自任何语言的任何类型的字母
  • 'p{Z}匹配任何类型的空白或不可见分隔符
  • 'p{N}匹配任何脚本中的任何类型的数字字符
  • 'p{M}匹配要与
组合的字符

更准确地说。请参阅演示。

https://regex101.com/r/qH1uG3/11

相关文章: