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

时间:2014-01-22 13:28:20

标签: 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, "");

和我的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字符?

1 个答案:

答案 0 :(得分:16)

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

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