См. W3 Unicode в XML и других языках разметки примечание. Он определяет класс символов как «не рекомендуется использовать в разметке», который я бы определенно отфильтровал для большинства веб-сайтов. Он включает в себя такие символы, как:
U + 2028–9, которые являются странными символами новой строки, которые запутают JavaScript, если вы попытаетесь использовать их в строковом литерале;
U + 202A – E, которые представляют собой двунаправленные управляющие коды, которые хитроумные пользователи могут вставить, чтобы в некоторых браузерах текст отображался в обратном направлении, даже вне заданного элемента HTML;
коды управления переопределением языка, которые также могут иметь область действия вне элемента;
BOM.
Кроме того, вы захотите отфильтровать / заменить символы, которые вообще недопустимы в Юникоде (U + FFFF и др.), И, если вы используете язык, который работает в UTF-16 изначально (например, Java) , Python в Windows), любые суррогатные символы (U + D800 – U + DFFF), которые не образуют допустимых суррогатных пар.
Диапазон 0x00-0x19 (в основном управляющие символы), исключая 0x09 (табуляция), 0x0A (LF) и 0x0D (CR)
И, возможно, (особенно для веб-приложения), также потерять CR и превратить вкладки в пробелы.
Диапазон 0x7F-0x9F (больше управляющих символов)
Да, покончим с этими, кроме случаев, когда люди действительно могут их иметь в виду. (Раньше так разрешалось, что позволяло людям публиковать строки, которые были неправильно декодированы, что иногда было полезно для диагностики проблем Unicode.) Я думаю, что для большинства сайтов они вам не нужны.