html - Configuración de la codificación de caracteres en el formulario enviado para Internet Explorer
internet-explorer forms (11)
Tengo una página que contiene un formulario. Esta página se sirve con el tipo de contenido text / html; charset = utf-8. Necesito enviar este formulario al servidor usando la codificación de caracteres ISO-8859-1. ¿Es esto posible con Internet Explorer?
Establecer el atributo accept-charset para el elemento de formulario, como este, funciona para Firefox, Opera, etc., pero no para IE.
<form accept-charset="ISO-8859-1">
...
</form>
Editar: Este formulario es creado por el servidor A y se enviará al servidor B. No tengo control sobre el servidor B.
Si configuro el servidor A para servir contenido con el juego de caracteres ISO-8859-1, todo funciona, pero estoy buscando la forma de que esto funcione sin cambios en la codificación del servidor A. Tengo otra pregunta sobre cómo configurar la codificación en el servidor A.
Acabo de tener el mismo problema y tengo una solución relativamente simple que no requiere ningún cambio en la codificación de caracteres de la página (que es un dolor en el trasero).
Por ejemplo, su sitio está en utf-8 y desea publicar un formulario en un sitio en iso-8859-1. Simplemente cambie la acción de la publicación a una página en su sitio que convierta los valores publicados de utf-8 a iso-8859-1.
esto podría hacerse fácilmente en php con algo como esto:
<?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
?>
Con navegadores decentes:
<form accept-charset="ISO-8859-1" .... >
Con IE (cualquiera):
document.charset = ''ISO-8859-1''; // do this before submitting your non-utf8 <form>!
Estoy bastante seguro de que no será posible con versiones anteriores de IE. Antes de idear el atributo accept-charset
, no había forma de que los elementos del form
especificaran qué codificación de caracteres aceptaron, y lo mejor que podrían hacer los navegadores es suponer que la codificación de la página en la que está el formulario hará.
Es un poco triste que necesites saber qué codificación se usó; hoy en día, esperaríamos que nuestros frameworks web se ocupen de esos detalles de manera invisible y expongan los datos de texto a la aplicación como cadenas Unicode, ya decodificadas ...
Hay un truco simple para esto:
Inserte un campo de entrada oculto en el formulario con una entidad que solo aparece en el conjunto de caracteres del servidor que su publicación (o haciendo un GET) acepta.
Ejemplo: si el formulario se encuentra en un servidor que sirve ISO-8859-1 y el formulario se publicará en un servidor esperando UTF-8, inserte algo así en el formulario:
<input name="iehack" type="hidden" value="☠" />
IE luego "detectará" que el formulario contiene un carácter UTF-8 y usará UTF-8 cuando POST o GET. Extraño, pero funciona.
Me parece recordar que Internet Explorer se confunde si la codificación accept-charset no coincide con la codificación especificada en el encabezado de tipo de contenido. En su ejemplo, usted afirma que el documento se envía como UTF-8, pero desea que el formulario se envíe en ISO-8859-1. Intenta hacer coincidir esos y ver si eso resuelve tu problema.
Para los símbolos rusos ''windows-1251''
<form action="yourProcessPage.php" method="POST" accept-charset="utf-8">
<input name="string" value="string" />
...
</form>
Cuando simplemente convierte cadena a cp1251
$string = $_POST[''string''];
$string = mb_convert_encoding($string, "CP1251", "UTF-8");
Parece que Microsoft sabe accept-charset , pero su documento no dice para qué versión funciona ...
Usted tampoco dice en qué versiones del navegador lo probó.
Parece que esto no se puede hacer, al menos con las versiones actuales de IE (6 y 7).
IE admite el atributo de forma accept-charset, pero solo si su valor es ''utf-8''.
La solución es modificar el servidor A para producir la codificación ''ISO-8859-1'' para la página que contiene el formulario.
Si tiene acceso al servidor, conviértalo a UTF-8. El arte de enviar formularios que no sean UTF-8 es una historia larga y lamentable; este documento sobre formularios e i18n puede ser de interés. Entiendo que no parece importarle el apoyo internacional; siempre puede convertir los datos UTF-8 a entidades html para asegurarse de que se mantenga Latin-1.
Tengo el mismo problema aquí. Tengo una página UTF-8 con la necesidad de publicar en un servidor ISO-8859-1.
Parece que IE no puede manejar ISO-8859-1. Pero puede manejar ISO-8859-15.
<form accept-charset="ISO-8859-15">
...
</form>
Así que esto funcionó para mí, ya que ISO-8859-1 e ISO-8859-15 son casi lo mismo.
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">