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

时间:2015-02-12 08:17:46

标签: php regex

我正在开发一个网络应用程序,用户可以用英语和其他语言发布文章(如论坛)。要从帖子标题创建非常永久链接,我使用这样的代码。

PHP:

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

除了字母和数字之外,它会删除所有字符。但我也希望用中文或印地语等其他语言保留文字。因此,它不会将“स्टैक ओवरफ्लो”剥离为“ ”。我还没有找到任何REGEX解决方案。

1 个答案:

答案 0 :(得分:5)

[^\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