Настройка кодировки символов в форме отправки для Internet Explorer - PullRequest
58 голосов
/ 30 сентября 2008

У меня есть страница, которая содержит форму. Эта страница обслуживается с типом содержимого text / html; charset = utf-8. Мне нужно отправить эту форму на сервер, используя кодировку ISO-8859-1. Возможно ли это с Internet Explorer?

Установка атрибута accept-charset для элемента формы, например, работает для Firefox, Opera и т. Д., Но не для IE.

<form accept-charset="ISO-8859-1">
  ...
</form>

Редактировать: эта форма создана сервером A и будет отправлена ​​на сервер B. У меня нет контроля над сервером B.

Если я настрою сервер A для обслуживания контента с набором символов ISO-8859-1, все будет работать, но я ищу способ сделать это без изменений в кодировке сервера A. У меня есть другой вопрос о настройке кодировки на сервере А.

Ответы [ 11 ]

35 голосов
/ 02 сентября 2009

Существует простой способ взломать это:

Вставьте скрытое поле ввода в форму с сущностью, которая встречается только в наборе символов, который принимает сервер, который ваша публикация (или выполняет GET) принимает.

Пример: если форма расположена на сервере, обслуживающем ISO-8859-1, и форма отправит сообщение на сервер, ожидая, что UTF-8 вставит что-то подобное в форму:

<input name="iehack" type="hidden" value="&#9760;" />

IE затем "обнаружит", что форма содержит символ UTF-8, и использует UTF-8 при выполнении POST или GET. Странно, но это работает.

31 голосов
/ 08 августа 2012

С приличными браузерами:

<form accept-charset="ISO-8859-1" .... >

С IE (любым):

document.charset = 'ISO-8859-1'; // do this before submitting your non-utf8 <form>!
6 голосов
/ 12 апреля 2011

У меня здесь такая же проблема. У меня есть страница UTF-8, которую необходимо отправить на сервер ISO-8859-1.

Похоже, IE не может обрабатывать ISO-8859-1. Но он может обрабатывать ISO-8859- 15 .

<form accept-charset="ISO-8859-15">
  ...
</form>

Так что это сработало для меня, поскольку ISO-8859-1 и ISO-8859-15 почти одинаковы.

6 голосов
/ 08 октября 2008

Кажется, что этого нельзя сделать, по крайней мере, с текущими версиями IE (6 и 7).

IE поддерживает атрибут формы accept-charset, но только если его значение равно utf-8.

Решение состоит в том, чтобы изменить сервер A для создания кодировки «ISO-8859-1» для страницы, содержащей форму.

2 голосов
/ 01 октября 2008

Если у вас вообще есть доступ к серверу, преобразуйте его обработку в UTF-8. Искусство отправки форм не-UTF-8 - длинная и печальная история; этот документ о формах и i18n может представлять интерес. Я понимаю, что вы, похоже, не заботитесь о международной поддержке; вы всегда можете преобразовать данные UTF-8 в html-объекты, чтобы убедиться, что они остаются в формате Latin-1.

1 голос
/ 09 апреля 2012

для русских символов 'windows-1251'

<form action="yourProcessPage.php" method="POST" accept-charset="utf-8">
<input name="string" value="string" />
...
</form>

Когда просто конвертировать строку в cp1251

$string = $_POST['string'];
$string = mb_convert_encoding($string, "CP1251", "UTF-8");
1 голос
/ 24 июля 2010

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

Например, ваш сайт находится в utf-8, и вы хотите опубликовать форму на сайте в iso-8859-1. Просто измените действие сообщения на страницу на вашем сайте, которая преобразует опубликованные значения из utf-8 в iso-8859-1.

это может быть легко сделано в php примерно так:

<?php
$params = array();
foreach($_POST as $key=>$value) {
    $params[] = $key."=".rawurlencode(utf8_decode($value));
}
$params = implode("&",$params);

//then you redirect to the final page in iso-8859-1
?>
0 голосов
/ 31 июля 2009
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
0 голосов
/ 01 октября 2008

Кажется, я помню, что Internet Explorer запутывается, если кодировка accept-charset не соответствует кодировке, указанной в заголовке типа содержимого. В вашем примере вы заявляете, что документ отправлен как UTF-8, но хотите, чтобы форма была отправлена ​​в ISO-8859-1. Попробуйте сопоставить их и посмотрите, решит ли это вашу проблему.

0 голосов
/ 30 сентября 2008

Похоже, Microsoft знает accept-charset , но их документ не сообщает, для какой версии он начинает работать ...
Вы также не скажете, в каких версиях браузера вы его тестировали.

...