Является ли использование «utf8 = ✓» более предпочтительным, чем «utf8 = true»?

569

Недавно я видел несколько URI, содержащих параметр запроса "utf8 = ✓". Мое первое впечатление (после размышлений «ммм, выглядит круто») состояло в том, что это можно использовать для обнаружения нарушенной кодировки символов.

Итак, это лучший способ решить потенциальные проблемы с кодировкой символов, или это просто разработчик, который развлекается с хакером?

Гэри Роу
источник
7
Я не согласен. Существуют схемы, которые выглядят как URN и которые принимают параметры запроса, такие как Биткойн. URI не ограничиваются браузерами. См. En.wikipedia.org/wiki/URI_scheme . Этот вопрос также может касаться общего случая, когда требуется кодировка символов, когда браузер обращается к обработчику протокола.
Гэри Роу
3
Приведите примеры этих URL или не произошло.
Хакре
10
Не по теме, но ок. Вот мое личное пожертвование URI биткойнов: bitcoin: 1KzTSfqjF2iKCduwz59nv2uqh1W2JsTxZH? Amount = 0.5 & label = Agile% 20Stack. Обратите внимание, что схема по сути является URN с параметрами запроса, но она передается обработчику протокола. Этот вид URI, вероятно, также может выиграть от обходного пути «utf8 = ✓».
Гэри Роу
1
@GaryRowe Так вы когда-нибудь получали пожертвования по этой ссылке?
Kyralessa

Ответы:

814

По умолчанию более старые версии IE (<= 8) будут отправлять данные формы в кодировке Latin-1, если это возможно. Включая символ, который не может быть выражен в Latin-1, IE вынужден использовать кодировку UTF-8 для отправки форм, что упрощает различные внутренние процессы, например, постоянство базы данных.

Если параметр был вместо этого, utf8=trueто это не вызвало бы кодировку UTF-8 в этих браузерах.

Gareth
источник
8
@LarsViklund Я должен был быть более ясным с моим комментарием. Я имел в виду, что проверка, связанная с кодировкой символов, упрощена, а не обойдена.
Гэри Роу
3
@Lars Правильно, это не освобождает вас от необходимости проверять ваши входные данные. Но это означает, что настройки кодирования становятся частью вашей обработки безопасности и не портят концепцию вашего пути «стандартной обработки»
Gareth
36
Также см. Stackoverflow.com/questions/3222013/… . Очевидно, в Ruby on Rails использовался персонаж снеговика, и его поменяли на галочку, которая была менее двусмысленной, но менее забавной.
Джек В.
11
@JohnLBevan он игнорируется принимающей стороной, он сделал свою работу, чтобы заставить браузер отправлять вещи в utf8 вместо latin1. Я также видел это как ie = 💩 (это точка кода «куча пу», похоже, что она не отображается в комментариях.)
cabbey
3
@ Гарет: Можете ли вы подтвердить заявление о том, что формы IE <= 8 не поддерживают кодировку документа и / или формы?
Хакре