Прискорююча кнопка n назначена для пропусків при навігації по сторінкам. Пропуск для переходу на початок контента.

Даний документ є перекладом. У випадку будь-яких невідповідностей і помилок остання версія документу англійською мовою повинна розглядатися як офіційна. Першопочаткове авторське право належить W3C, як це вказано нижче.

Перекладач: World translation (Олександр Шлапак)

s_gotoW3cHome Інтернаціоналізація
 

Багатомовні форми кодування

Аудиторія: шифрувальники XHTML/HTML (за допомогою редакторів і скриптів), розробники скриптів (PHP, JSP, і т. п.), менеджери Веб проектів, і кожен, хто шукає інформацію про те, як поводитися з кодуваннями в формах.

Питання

Який найкращий спосіб роботи з формами, що включають в себе кілька мов і скриптів?

Відповідь

Кращий спосіб обробки кодування в (X) HTML формах є обслуговування всіх ваших сторінок в UTF-8. UTF-8 може представляти символи із широкого спектру мов. Браузери відсилають дані форми в тому ж кодуванні, що і сторінка, що містить форму, так що користувач може заповнити дані на будь-якій мові і скрипті, яких вони потребують.

Є кілька деталей необхідних для того, щоб переконатися що цей підхід працює добре. По-перше, важливо повідомити браузеру, що сторінка форми закодована в UTF-8. Існують різні способи як повідомити браузеру про кодування вашої сторінки. Це важливо в будь-якому випадку, але тим більше, якщо ваша сторінка форми не містить ніяких символів за межами US-ASCII, але ваші користувачі можуть надрукувати інші символи.

Далі, скрипт, що приймає дані користувача повинен переконатися що введені дані дійсно закодовані в UTF-8 кодуванні (на випадок якщо відбулася яка-небудь непередбачена ситуація, наприклад зміна кодування користувачем). Перевірка можлива завдяки тому, що UTF-8 має особливу послідовність байтів, яка не зустрічається в інших кодуваннях. Якщо від користувача надійшли дані в кодуванні, що відрізняється від UTF-8, ми повинні видати йому повідомлення про помилку.

Наприклад, в Perl регулярний вираз, що перевіряє кодування користувача, може виглядати наступним чином:

$field =~
  m/\A(
     [\x09\x0A\x0D\x20-\x7E]            # ASCII
   | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
   |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
   | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
   |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
   |  \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3
   | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
   |  \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16
  )*\z/x;

Цей вираз може бути адаптований для інших мов програмування. Він піклується про такі різні питання, як неправильні занадто довгі кодування і неправильне використання сурогатів. Він повернеться вірно, якщо змінна $field закодована в UTF-8, і невірно в іншому випадку.

Розкажіть нам про те, що Ви думаєте.

Підписатися на RSS джерело.

Нові джерела

Новини головної сторінки

Twitter (Новини головної сторінки)

‎@webi18n

Додаткові матеріали

Автор: Martin Dürst, W3C. Перекладач: World translation (Олександр Шлапак).

Допустимий XHTML 1.0!
Допустимий CSS!
Кодування UTF-8!

Переклад Англійського контенту від 2007-10-26. Переклад останнього оновлення 2011-11-05 17:00 GMT

Для перегляду історії внесення змін до перекладу натисність qa-forms-utf-8 в блоге i18n.