Вопрос

Я собираюсь создать блок валидации форм, который в дополнение к "обычным" тестам проверяет кодировка тоже.

Согласно этой статье http://www.w3.org/International/questions/qa-forms-utf-8 тем допустимые символы: CR, LF и TAB в диапазоне от 0 до 31, DEL=127 в not allowed.

С другой стороны, есть управляющие символы в диапазоне 0x80-0xA0.В разных источниках Я видел, что они разрешены, а что нет.Кроме того, я видел, что это другое для XHTML, HTML и XML.

В некоторых статьях говорилось, что FF тоже разрешен?

Может ли кто-нибудь дать хороший ответ с источниками, что можно дать, а что нет?

РЕДАКТИРОВАТЬ:Даже там http://www.w3.org/International/questions/qa-controls некоторая двусмысленность

Поддерживается диапазон C1

Но таблица показывает, что они незаконны, и предыдущие проверки UTF-8 допускают их?

Это было полезно?

Решение

Символы Юникода в этих диапазонах допустимы в HTML 4.01:

0x09..0x0A
0x0D
0x20..0x7E
0x00A0..0xD7FF
0xE000..0x10FFFF    

В XHTML 1.0...неясно.Видеть http://cmsmcq.com/2007/C1.xml#o127626258

Другие советы

Я думаю, вы смотрите на это неправильно.Ресурсы, которые вы связываете, указывают, какие закодированные значения действительны в (Х)HTML, но похоже, что вы хотите проверить «ответ» веб-формы — например, значения различных элементов управления формы, переданные обратно на ваш сервер.В этом случае вам следует смотреть не на то, что допустимо в (X)HTML, а на то, что допустимо в приложение/x-www-form-urlencoded, и, возможно, также multipart/данные формы, MIME-типы.Тем Стандарты HTML 4.01 для <FORM> элементы четко указано, что для application/x-www-form-urlencoded «Небуквенно-цифровые символы заменяются на %HH»:

Это тип контента по умолчанию.Формы, отправленные с этим типом контента, должны быть закодированы следующим образом:

  1. Имена и значения элементов управления экранируются.Пробелы заменяются на «+», а затем зарезервированные символы экранируются, как описано в разделе [RFC1738], раздел 2.2:Небуквенно-цифровые символы заменяются на «%HH», знак процента и две шестнадцатеричные цифры, представляющие код ASCII символа.Разрывы строк представлены парами «CR LF» (т. е. `%0D%0A').
  2. Имена/значения элементов управления перечислены в том порядке, в котором они появляются в документе.Имя отделяется от значения знаком «=», а пары имя/значение отделяются друг от друга знаком «&».

Что касается того, какая кодировка символов содержится (т.ли %A0 это неразрывный пробел или ошибка), это согласовывается accept-charset атрибут на вашем <FORM> элемент и ответ (ну, на самом деле GET или POST запрос) Content-Type заголовок.

Закон Постеля:Будьте консервативны в том, что вы делаете;будьте либеральны в том, что вы принимаете от других.

Если вы создаете документы для чтения другими, вам следует избегать/экранировать все управляющие символы, даже если они технически законны.А если вы анализируете документы, вам следует постараться принять все управляющие символы, даже если они технически незаконны.

Прежде всего, любой октет действителен.Тем упомянутое регулярное выражение для последовательностей UTF-8 просто опускает некоторые из них, поскольку на практике они довольно редко вводятся пользователем.Но это не значит, что они недействительны.Их просто не ожидается.

Первая ссылка, которую вы упомянули, не имеет никакого отношения к проверке разрешенных символов в XHTML...пример по этой ссылке просто показывает общий/общий шаблон для определения того, находятся ли необработанные данные в кодировке utf-8 или нет.

Это цитата из второй ссылки:

HTML, XHTML и XML 1.0 не поддерживаются диапазон C0, кроме HT (Горизонтальная таблица) U+0009, НЧ (Перевод строки) U+000A и CR (каретка Возврат) U+000D.Диапазон C1 поддерживается, т.е.Вы можете закодировать или представлять их в виде NCR (числовые символьные ссылки).

Я читаю это так:

Любой управляющий символ в диапазоне C1 поддерживается, если вы его кодируете (с использованием представлений Base64 или Hex) или представляете их как NCR.

В диапазоне C0 поддерживаются только U+0009, U+000A и U+000D.Никакой другой управляющий код в этом диапазоне не может быть представлен.

Если известно, что документ представляет собой XHTML, вам следует просто загрузить его и проверить на соответствие схеме.

Какой язык программирования вы используете?По крайней мере, для Java существуют библиотеки для проверки кодировки строки (или байтового массива).Я думаю, подобные библиотеки будут существовать и для других языков.

Правильно ли я понимаю ваш вопрос:вы хотите проверить, действительны ли данные, отправленные через форму, и правильно ли они закодированы?

Если да, то зачем делать несколько дел одновременно?ИМХО, было бы намного проще разделить эти проверки и выполнять их шаг за шагом.

  1. Вы хотите проверить, правильно ли закодированы отправленные данные формы (насколько я понимаю, в UTF-8).Как говорит аркканцлер Чудакулли, это легко проверить на большинстве языков.
  2. Затем, если кодировка правильная, вы можете проверить, действительны ли это данные формы.
  3. Затем, если данные формы действительны, вы можете проверить, содержат ли данные то, что вы ожидаете.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top