2010-08-23 164 views
4

我有一些文本文件包含一些非ASCII字符,我想刪除它們,但保留格式化字符。如何刪除虛假的非ASCII字符,但保留空格和換行符?

我試圖

$description = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $description); 

然而這似乎剝離新行和其他格式化出並還與一些希伯來語的問題,其然後被轉換這個

משפטיםנוספיםמהמומחה。 נסוותהנו! חג חנוכהשמח ****************************************חדש - האפליקציההיחידהשאומרת關於 最新版本1.1 - 專家會議!!! *

這個

1.4: 「...... 」「 ...... 」「 50 ...」。 ,。 ! **************************************** - 版本1.1的新功能 - 專家會談!!! *

回答

3

這並非取代非ASCII字符...... Ascii字符在範圍0-127之內。所以基本上你要做的是寫一個rexeg將一個字符集轉換爲另一個字符集(不只是替換掉一些字符,這會更困難)...

至於你想做什麼,我想你想的iconv function ......你需要知道輸入編碼,但一旦你做,你可以再告訴它忽略非表示的字符:

$text = iconv('UTF-8', 'ASCII//IGNORE', $text); 

你也可以使用ISO-8859-1,或你想要的任何其他目標字符集。

+0

不,他不是要轉換的字符集。他試圖從UTF-8字符串中刪除ASCII範圍以外的字符。當然,你的解決方案是可行的,因爲ASCII是UTF-8的一個子集。使用ISO-8859-1,他會得到非ASCII字符,並且他不能再使用具有期望UTF-8功能的字符串。 – Artefacto 2010-08-23 17:17:03

1

你在做什麼不會工作,因爲你將UTF-8字符串看作是單字節編碼。您實際上是刪除部分字符。如果您必須將u標誌添加到正則表達式來激活UTF-8模式。

由於您只想留下控制字符和其他ASCII範圍字符,因此您必須用「'替換所有其他字符。所以:

$description = preg_replace('/[^\x{0000}-\x{007F}]/u', '', $description); 

這給你的投入:

 
. ! ********************* - * NEW to version 1.1 - the expert talks!!! * 
+0

謝謝,但是當我剛剛試過時,它給了我這個輸出1.4:「,...」「...」「50 ...」。 ,。 ! **************************************** - ** 1.1版本的新功能 – kitenski 2010-08-23 21:23:38

相關問題