2009-06-29 1 views
13

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

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

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

+0

«Все наши базы данных и интернет-материалы» - все ваши интернет-материалы принадлежат нам. –

+0

В соответствии с принятым ответом на [этот вопрос] (http://stackoverflow.com/questions/3719974/is-there-any-benefit-to-adding-accept-charset-utf-8-to-html-forms- if-the-page), 'accept-charset' решит определенную проблему, которую вы обнаружили: ie, если пользователь говорит своему браузеру интерпретировать страницу как не-UTF-8,' accept-charset' должен заставить браузер отправить несмотря на это, содержимое формы, как UTF-8.Независимо от того, стоит ли защищать эту конкретную ситуацию, стоит добавить атрибут ко всем вашим формам, ну, это ваш приговор. –

+1

убедитесь, что ваша страница действительно utf-8; в отладчике браузера, найдите отправленный заголовок Content-Type. Также, в консоли JS, оцените document.charset; должен возвращать некоторую орфографию utf8. «windows-1252» может означать, что браузер не распознает отправленную кодировку. – OsamaBinLogin

ответ

3

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

2

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

10

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

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

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

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

4

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

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