Удаление управляющих символов в строке utf-8

Итак, я удаляю управляющие символы (вкладки, cr, lf,\v и все другие невидимые символы) на стороне клиента (после ввода), но поскольку клиенту нельзя доверять, я должен удалить их и на сервере.

поэтому согласно этой ссылке http://www.utf8-chartable.de/

управляющие символы от x00 до 1F и от 7F до 9F. таким образом, моя функция управления клиентом (javascript) char:

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

а моя функция управления php (server) char:

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

Теперь это создает проблемы с международными символами utf8, такими как ς (xCF x82) только на PHP (потому что x82 находится во второй группе последовательностей), эквивалент javascript не создает никаких проблем.

Теперь мой вопрос: следует ли удалить управляющие символы из 7F в 9F? Насколько я понимаю, последовательности из 127 до 159 (от 7F до 9F), очевидно, могут быть частью допустимой строки UTF-8?

тоже, может быть, мне даже не нужно фильтровать контрольные символы от 00 до 31, потому что некоторые из этих символов могут появляться в некоторых странных (японский? китайский?), но действительных символов utf-8?

Ответы

Ответ 1

Кажется, мне просто нужно добавить флаг u в регулярное выражение таким образом он становится:

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