我有一些文本文件包含一些非ASCII字符,我想删除它们,但保留格式字符。
我试过
$description = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $description);
然而,这似乎剥离了换行符和其他格式,并且还有一些希伯来语的问题然后转换了这个
משפטיםנוספיםמהמומחה。 נסוותהנו! חג חנוכהשמח ****************************************חדש - האפליקציההיחידהשאומרתלךמה מצבהסוללהשלך** 1.1版的新功能 - 专家讲座!!! *
到这个
1.4:“,......”“......”“50 ......”。 ,。 ! **************************************** - **版本1.1的新功能 - 专家会谈!!! *
答案 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!!! *