2012-03-02 37 views
2

任何人都知道從PHP中的字符串中篩選不可見和稀有字符的好方法嗎?PHP:如何過濾不可見的ASCII字符?

我在解析網站新聞文章文本的情況下,正在執行一系列「規範化」操作,例如刪除雙重新行,刪除標籤等。問題是我偶然發現了一些奇怪的無形字符,當我打電話給ord()時,我得到194和160 ..他們不屬於那裏。事情是這樣的字符出現在新的段落之間,所以當文本被渲染時,似乎有一個雙重的新行,因爲有兩個段落之間有一個不可見的字符。

如果我可以很容易地過濾除拉丁文,西里爾文,數字和普通字符(如*,(,%等)之外的任何東西,我仍然可以很好。我可以製作全部地圖並替換剩下的地圖,但是將是最簡單和最快的方式來做到這一點?

+4

ASCII只定義了128個字符 - 沒有ASCII字符194和160.您應該[在Unicode上閱讀](http://www.joelonsoftware.com/articles/Unicode.html)。 – phihag 2012-03-02 00:22:28

+1

iso-8859-1,-2,-3,-4,-9,-10,-14,-15,-16將'160'定義爲非破壞空間,將'194'定義爲拉丁文的大寫字母A抑揚。 -5將194定義爲西裏爾字母TE'Т',-6將194定義爲阿拉伯語Alef,Madda高於â,-7將194定義爲希臘語資本Beta'B',-8不定義194,-11將194定義爲Thai Yo Yak'',-13將194定義爲拉丁文大寫字母A和Macron(但是當使用'terminus' iso-10646字體時,我的手冊頁顯示'B';請參閱圖)。 – sarnold 2012-03-02 00:34:55

+1

這個問題似乎有效。當然,只需稍作編輯即可糾正作者的輕微疏忽。 – Adjam 2012-03-02 00:40:57

回答

0

該文章和我的腳本都在相同的'語言環境'或任何它被稱爲 - 它使用西里爾字符的Windows-1251,解析是正確的,但海報設法插入一個奇怪的字符,而輸入新聞文章。

我做了一個preg_replace正則表達式來除去字符,數字和一些常見的符號,它適用於我

@phihag這篇文章很有意思,但沒有回答我的問題,只是告訴我它並沒有被正確地問及讓我感到無聊。