HTML-формы: проблемы, связанные с сочетанием кодировки с enctype в Firefox - PullRequest
2 голосов
/ 06 октября 2009

У меня есть веб-сайт с доской объявлений. Доска позволяет людям публиковать сообщения и включать вложения. У меня была проблема, когда мой сайт работал с ошибками каждый раз, когда кто-то писал пост с не-Unicode символами Чтобы решить эту проблему, я изменил код HTML-формы с

enctype="multipart/form-data"

(поскольку я принимаю закачки файлов) на:

enctype="multipart/form-data;charset=UTF-8"

Это решило проблему персонажа. Но это сломало возможность загрузки файлов в Firefox 2 до 3.5. Firefox принимает весь текст, который отправляет пользователь, но не данные файла. Он действует так, как должен, но как будто не было подано ни одного файла. В Safari все отлично работает.

Я тоже пробовал

enctype="multipart/form-data" accept-charset="UTF-8"

... но это не повлияло на проблему персонажа.

Есть идеи, как обойти это?

Ответы [ 2 ]

6 голосов
/ 06 октября 2009

charset не зарегистрированный параметр для типа носителя multipart/form-data. Это ничего не должно делать.

Согласно RFC2388 кодировка отправленных полей должна фактически передаваться браузером в заголовке Content-Type подраздела данных формы. На практике ни один браузер не делает этого.

accept-charset нельзя использовать, потому что он не работает в IE: вместо выбора набора символов для отправки он фактически указывает альтернативный набор символов для использования, для каждого поля, когда символы не помещаются в основной набор символов (которая является кодировкой текущей страницы). Это эффективно искажает ваши строки, так как вы не можете выяснить, какой кодировщик IE на самом деле использовал.

Единственный эффективный способ заставить браузеры отправлять ваши формы как UTF-8 - это обслуживать страницу, содержащую форму, как UTF-8, устанавливая заголовок Content-Type: text/html;charset=utf-8, включая <meta> HTTP-эквивалент или оба ( может быть хорошей идеей, если пользователь сохраняет страницу на диск, теряя информацию заголовка).

5 голосов
/ 04 февраля 2010

Проблема не в данных формы, а в поле имени файла - которое просто не работает, если вам нужны utf-8 и данные файла, поэтому, если вам нужно обработать имя файла на сервере, что часто встречается, вы запутались вверх.

Если вы установите enctype="multipart/form-data;charset=UTF-8" в своей форме, Tomcat 6 преобразует это в: тип контента: application/x-www-form-urlencoded, что является проблемой.

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

...