所以我正在客户端(在输入后)删除控制字符(制表符、回车、换行符、\v和所有其他不可见字符),但由于不能信任客户端,我也必须在服务器上删除它们。
因此根据这个链接 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字符(如PHP中的ς(xCF x82))出现问题,仅限于PHP(因为x82位于第二个序列组内),JavaScript等价物不会创建任何问题。
现在我的问题是,我应该删除7F到9F之间的控制字符吗?据我所知,127到159(7F到9F)的这些序列显然可以成为有效的UTF-8字符串的一部分?
同时,也许我甚至不应该过滤00到31的控制字符,因为其中一些字符也可以出现在某些奇怪(日语?中文?)但有效的UTF-8字符中?