PHP如何从字符串中删除非语言字符?

问题描述:

我该如何删除所有非语言字符?PHP如何从字符串中删除非语言字符?

我想删除像下面这样的人物,和所有其他的不是语言字符:

 

我使用这个:

preg_replace("/[^a-z0-9A-Z\-\'\|\!\.\?\:\)\(\;\*\"]/u", " ", $text); 

这是很好的英语, 我需要批准所有语言字符,如俄语,阿拉伯语,希伯来语,日本...

是否有任何字符串函数可以用来保留所有语言字符?

感谢

+0

你在那里有私人使用区域的代码点。通过“非语言字符”,你的意思是不常用的字符,比如私人使用区号码?或者任何符号,如“☃”?那么“→”呢?这在书面文字中很有用。 – deceze

+0

是的,我想删除所有的符号和其他通常不使用的常规键盘,如我使用的A-Z,但对于所有语言 – motioz

+0

你想去“文本”多远?有很多与印刷相关的东西的巨大部分,这可以说是语言相关的。这个主要目标/原因是什么? – deceze

没有正则表达式将是完美的你想要的东西 - 语言和文字是太复杂了这一点。但是近似可能是

preg_replace('/[^\p{L}\p{M}\p{Z}\p{N}\p{P}]/u', ' ', $text); 

这将通过这不是一个Unicode字符属性“信”,“商标”,“分隔符”,“数字”或“标点符号”的一个空格替换任何东西。

+0

非常好! 我认为它适合所有语言, – motioz

+0

非常好的解决方案! – 2012-01-25 11:55:29

+0

关闭先生的帽子!拯救了我的一天。 – Nasaralla

Tim Pietzcker的答案不适用于我的情况。

This Works。

$after = preg_replace('/[^\w\s]+/u','' , $before);