所以我在客户端删除控制字符(tab,cr,lf,\ 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);
现在这似乎在PHP中产生了国际utf8字符的问题,例如ς(xCF x82)(因为x82在第二个序列组中),javascript等价物不会产生任何问题。
现在我的问题是,我应该将控制字符从7F删除到9F吗?据我所知,从127到159(7F到9F)的序列显然可以是有效的UTF-8字符串的一部分吗?
另外,也许我甚至不应该过滤00到31个控制字符,因为这些字符中的一些可能会出现在一些奇怪的(日语?中文?)但是有效的utf-8字符?
答案 0 :(得分:16)
似乎我只需要将 u 标志添加到正则表达式中 因此它变成了:
$s = preg_replace('/[\x00-\x1F\x7F-\x9F]/u', '', $s);