Обнаженная текстовая санитария - PullRequest
4 голосов
/ 07 июля 2010

В приложении, которое принимает, хранит, обрабатывает и отображает текст Unicode (например, для целей обсуждения, скажем, что это веб-приложение), , какие символы должны всегда быть удалены из входящих текст

Я могу вспомнить некоторые из них, которые в основном перечислены в контрольных кодах C0 и C1 статьи Википедии :

  1. Диапазон 0x00 - 0x19 (в основном управляющие символы), за исключением 0x09 (табуляция), 0x0A (LF) и 0x0D (CR)

  2. Диапазон 0x7F - 0x9F (больше управляющих символов)

Диапазоны символов, которые могут быть безопасно приняты , приняты , было бы еще лучше узнать.

Существуют и другие уровни фильтрации текста - можно канонизировать символы, которые имеют несколько представлений, заменять неразрывные символы и удалять символы нулевой ширины, но в основном меня интересуют основы.

Ответы [ 2 ]

1 голос
/ 07 июля 2010

См. 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.) Я думаю, что для большинства сайтов они вам не нужны.

0 голосов
/ 07 июля 2010

Полагаю, это зависит от вашей цели.В UTF-8 вы можете ограничить пользователя символами клавиатуры, если это ваша прихоть, то есть 9,10,13, [32-126].Если вы используете UTF-8, диапазон 0x7f + означает, что у вас есть многобайтовый символ Unicode.В ASCII 0x7f + состоит из специальных символов отображения / формата и локализован, чтобы разрешать расширения в зависимости от языка в местоположении.

Обратите внимание, что в UTF-8 символы клавиатуры могут различаться в зависимости от местоположения, поскольку пользователивведите символы на их родном языке, который будет выходить за пределы диапазона 0x00-0x7f, если их язык не использует латинский алфавит без акцентов (арабский, китайский, японский, греческий, Crylic и т.посмотрите здесь вы можете увидеть, какие символы из UTF-8 будут отображаться.

...