Pull to refresh

Решаем проблемы с поломанной кодировкой: accept-charset

Reading time 2 min
Views 11K
Столкнулся с такой проблемой: многие программисты либо не знают о существовании accept-charset, либо игнорируют данный атрибут. Прийдя в свою текущую компанию я занялся разработкой REST API сервиса, но переодически на меня сваливались баги «XML response is broken for ...». Пришлось копнуть поглубже в GUI и обнаружилось отсутствие излюбленного тага. Зачем нам еще один атрибут, спросите вы?


Что такое accept-charset лучше меня уже давно описали в W3C по этой ссылке (http://www.w3.org/TR/html401/interact/forms.html#adef-accept-charset)

Давайте теперь представим ситуацию:


— у вас есть сайт
— вы указали в meta кодировку utf-8
— вы настроили серверную часть на работу с utf-8 (базу, бекенд, прочее)
Вы тестируете: заходите на сайт, отправляете с формы — все отлично. Однако проблема в том, что многие забывают:
1. в большинстве случает в браузере стоит автоопределение кодировки и ваш сайт корректно постит данные на серверную часть
2. есть люди, которые выставляют себе кодировку вручную
3. есть любители поиграться с вашим сайтом
4. прочее: боты, софт для тестирования и тд

Что же произойдет в таком случае при отсутствии сабжевого атрибута в таге FORM:
1. откройте ваш сайт
2. смените в браузере кодировку, пусть это будет ISO-8859-1
3. попробуйте ввести данные на русском или, например: немецком, с использованием умлаутов; хотите пойти дальше — попробуйте спец. символы
4. запостите вашу форму
5. откройте вашу запись в базе данных и посмотрите в какой кодировке попали туда ваши символы и как они были обработаны серверной частью

Ответ: к вам приедет текст в кодировке ISO-8859-1 потому что браузер следует стандартам и определенной последовательности в определении кодировки, а это значит, что если жестко указано ISO-8859-1, то браузер подчинится и использует ISO-8859-1 для отправки данных из формы

Как с этим бороться?


Посмотрите в заголовок топика: да, именно accept-charset=«utf-8» в таге FORM спасет вас от этой проблемной ситуации. Данный атрибут даст браузеру необходимые «знания» о том, что данные из формы следует отправлять только в кодировке utf-8 и никакой другой

Вывод: все гениальное — просто, а владеет миром в наше время информация.

P.S. загадкой до сих пор для меня остается youtube, они намеренно не используют accept-charset, вместо этого используют какой-то свой функционал, который делает тоже самое (похоже javascript-ом)
Tags:
Hubs:
+15
Comments 3
Comments Comments 3

Articles