Могу ли я заставить веб-браузеры отправлять текст формы как UTF8?

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

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

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

Ответы

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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