从PHP中删除UTF-8字符串中的控制字符

Mir*_*ror 19 javascript php encoding utf-8

所以我在客户端(输入后)删除控制字符(tab,cr,lf,\ v和所有其他隐形字符),但由于客户端不可信,我必须在服务器中删除它们.

所以根据这个链接http://www.utf8-chartable.de/

控制字符从x00到1F,从7F到9F.因此我的客户端(javascript)控件删除功能是:

return s.replace(/[\x00-\x1F\x7F-\x9F]/g, "");
Run Code Online (Sandbox Code Playgroud)

和我的php(服务器)控件删除功能是:

$s = preg_replace('/[\x00-\x1F\x7F-\x9F]/', '', $s);
Run Code Online (Sandbox Code Playgroud)

现在,这似乎会产生国际utf8字符的问题,例如PHP中的ς(xCF x82)(因为x82在第二个序列组中),javascript等效不会产生任何问题.

现在我的问题是,我应该将控制字符从7F删除到9F吗?据我所知,从127到159(7F到9F)的序列显然可以是有效的UTF-8字符串的一部分?

另外,也许我甚至不应该过滤00到31个控制字符,因为这些字符中的一些可能会出现在一些奇怪的(日语?中文?)但是有效的utf-8字符?

Mir*_*ror 16

似乎我只需要将u标志添加到正则表达式,因此它变为:

$s = preg_replace('/[\x00-\x1F\x7F-\x9F]/u', '', $s);
Run Code Online (Sandbox Code Playgroud)