Могу ли я заставить веб-браузеры отправлять текст формы как UTF8? - PullRequest
15 голосов
/ 29 июня 2009

Я хочу стандартизировать UTF8 на нашем веб-сайте. Все наши базы данных и интернет-материалы находятся в UTF8. Все наши веб-серверы отправляют HTTP-заголовок charset=utf-8. Однако я обнаружил, что, изменив кодировку в моем Firefox (View -> Character Encoding) на что-то другое, я могу ввести в форму символ Latin-9, а PHP просто воспринимает их как некорректный UTF8.

Сколько мне нужно беспокоиться об этом? Возможно ли для веб-браузера пользователя переопределить заголовок кодировки UTF8 и отправить не-UTF8?

Обновление : Несколько человек предложили accept-charset в отдельных формах. Однако я бы предпочел не менять каждую веб-форму. Предполагая, что я могу контролировать заголовок типа контента HTTP, и он установлен в UTF8, мне есть о чем беспокоиться?

Ответы [ 4 ]

11 голосов
/ 13 июля 2010

Возможно ли это для пользователя сети? браузер для переопределения кодировки utf8 заголовок и отправить не-UTF8?

Конечно. Вы не управляете клиентом, и клиент может делать все, что ему захочется, в том числе разрешать пользователям переопределять обычные кодировки и вызывать отправку нежелательной почты (или то, что считается нежелательной) на ваш сервер.

Тем не менее, похоже, что вы предприняли здесь большинство важных шагов. Фактический HTML-документ имеет кодировку UTF-8 и явно помечен как таковой, что означает, что браузеры, как правило, по умолчанию также отправляют формы в этой кодировке. (Обратите внимание, что спецификация HTML не требует этого. Указание accept-charset в форме явным образом является единственной совместимой со спецификацией гарантией.) Я подозреваю, что это будет работать так, как ожидается во всех современных браузерах, и вы можете легко это проверить.

На сервере ваша работа всегда , чтобы проверить ваши данные в той степени, в которой это важно для вашей службы. Хотя подавляющее большинство ваших пользователей будут доброжелательными и используют современные стандартные браузеры, HTTP-протокол открыт, и здесь присутствуют как дурацкие пользователи, так и злоумышленники, и оба могут выдавать вам любые данные. Убедитесь, что вы не делаете предположений о кодировке данных, когда речь идет о безопасности или аутентифицированных данных, и очистите этот материал перед тем, как отправлять его в базы данных.

4 голосов
/ 31 августа 2011

Я думаю, что лучшим решением является преобразование в UTF-8 и обработка любых символов, отличных от UTF-8, когда пользователь передает данные. Как отмечено выше, accept-charset="UTF-8" не гарантирует, что данные имеют формат UTF-8. И, если вам нужно изменить формы по всему сайту, это не очень хорошее решение.

Таким образом, обработка ввода при отправке может быть лучшим способом.

3 голосов
/ 29 июня 2009

Попробуйте добавить атрибут accept-charset к элементам формы.

2 голосов
/ 29 июня 2009

Поместите элемент accept-charset = "UTF-8" в элемент формы, что приведет к тому, что сообщение формы будет UTF-8, несмотря на кодировку содержимого страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...