2012-01-25 123 views
0

我該如何刪除所有非語言字符?PHP如何從字符串中刪除非語言字符?

我想刪除像下面這樣的人物,和所有其他的不是語言字符:

 

我使用這個:

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

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

是否有任何字符串函數可以用來保留所有語言字符?

感謝

+0

你在那裏有私人使用區域的代碼點。通過「非語言字符」,你的意思是不常用的字符,比如私人使用區號碼?或者任何符號,如「☃」?那麼「→」呢?這在書面文字中很有用。 – deceze

+0

是的,我想刪除所有的符號和其他通常不使用的常規鍵盤,如我使用的A-Z,但對於所有語言 – motioz

+0

你想去「文本」多遠?有很多與印刷相關的東西的巨大部分,這可以說是語言相關的。這個主要目標/原因是什麼? – deceze

回答

10

沒有正則表達式將是完美的你想要的東西 - 語言和文字是太複雜了這一點。但是近似可能是

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

0

Tim Pietzcker的答案不適用於我的情況。

This Works。

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