如何删除虚假的非ascii字符,但保留空格和换行符?

时间:2010-08-23 16:48:27

标签: php strip non-ascii-characters

我有一些文本文件包含一些非ASCII字符,我想删除它们,但保留格式字符。

我试过

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

然而,这似乎剥离了换行符和其他格式,并且还有一些希伯来语的问题然后转换了这个

  

משפטיםנוספיםמהמומחה。 נסוותהנו! חג   חנוכהשמח   ****************************************חדש - האפליקציההיחידהשאומרתלךמה   מצבהסוללהשלך** 1.1版的新功能 -   专家讲座!!! *

到这个

  

1.4:“,......”“......”“50 ......”。 ,。 ! **************************************** - **版本1.1的新功能 - 专家会谈!!! *

2 个答案:

答案 0 :(得分:3)

这不是替换非ASCII字符... Ascii字符在0-127范围内。所以基本上你要做的就是编写一个rexeg来将一个字符集转换为另一个字符集(不仅仅是替换掉一些字符,这要困难得多)......

至于你想做什么,我想你想要iconv function ...你需要知道输入编码,但是一旦你这样做,你可以告诉它忽略不可表示的字符:

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

您还可以使用ISO-8859-1或任何其他目标字符集。

答案 1 :(得分:1)

您所做的事情将无法正常工作,因为您将UTF-8字符串视为单字节编码。您实际上正在移除部分字符。如果必须将u标志添加到regex表达式以激活UTF-8模式。

由于您只想保留控制字符和其他ASCII范围字符,因此必须用''替换所有其他字符。所以:

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

给出了您的意见:

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