2014-01-22 69 views
14

所以我在客戶端(輸入後)刪除控制字符(tab,cr,lf,\ v和所有其他不可見的字符),但由於客戶端不可信,我有也要在服務器中刪除它們。刪除UTF-8字符串中的控制字符

所以根據該鏈接http://www.utf8-chartable.de/

控制字符是從x00到1F和從7F至9F。 因此我的客戶(JavaScript)的控制焦炭去除功能是:

return s.replace(/[\x00-\x1F\x7F-\x9F]/g, ""); 

和我的PHP(服務器)控制焦炭去除功能是:

$s = preg_replace('/[\x00-\x1F\x7F-\x9F]/', '', $s); 

現在,這似乎產生了與國際UTF8字符這樣的問題作爲ς(xCF x82)僅限於PHP(因爲x82位於第二個序列組中),所以相當於javascript的javascript不會產生任何問題。

現在我的問題是,我應該從7F到9F刪除控制字符?據我的理解,從127到159(7F到9F)的序列顯然可以是有效的UTF-8字符串的一部分?

另外,也許我不應該過濾00到31控制字符,因爲也有一些這些字符可以出現在一些奇怪的(日本?中國?),但有效的utf-8字符?

+0

也許這可以幫助你:http://stackoverflow.com/q/12543476/1066234它是一個不同的正則表達式。 –

回答

12

看來,我只需要在û標誌添加到正則表達式 因此變成:

$s = preg_replace('/[\x00-\x1F\x7F-\x9F]/u', '', $s);