Поэтому я удаляю контрольные символы (вкладки, cr, lf, \ v и все другие невидимые символы) на стороне клиента (после ввода), но поскольку клиенту нельзя доверять, я также должен удалить их на сервере.
поэтому согласно этой ссылке http://www.utf8-chartable.de/
управляющие символы от x00 до 1F и от 7F до 9F. таким образом, моя функция удаления символов управления клиентом (javascript):
return s.replace(/[\x00-\x1F\x7F-\x9F]/g, "");
и моя функция удаления char php (server):
$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?
кажется, что мне просто нужно добавить флаг u в регулярное выражение, таким образом оно становится:
$s = preg_replace('/[\x00-\x1F\x7F-\x9F]/u', '', $s);