2008-09-30 9 views
56

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?Configuración de la codificación de caracteres en el formulario para Internet Explorer

Establecer el atributo accept-charset en el elemento de formulario, como este, funciona para Firefox, Opera, etc., pero no para IE.

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

Editar: Esta forma es creada por el servidor A y será presentado al servidor B. tengo ningún control sobre el servidor B.

Si fijo Un servidor para servir contenido con el juego de caracteres ISO-8859- 1 todo funciona, pero estoy buscando la manera de hacer que esto funcione sin cambios en la codificación del servidor A. Tengo otra pregunta about setting the encoding in server A.

Respuesta

0

Estoy bastante seguro de que no será posible con versiones anteriores de IE. Antes de idear el atributo accept-charset, los elementos form no tenían forma de especificar 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 se encuentra el formulario hará.

Es un poco triste que necesite saber qué codificación se usó; hoy en día esperaríamos que nuestras estructuras web se hicieran cargo de tales detalles invisiblemente y expongan los datos de texto a la aplicación como cadenas Unicode, ya decodificadas. .

0

Parece que Microsoft sabe accept-charset, pero su documento no dice de qué versión de que comience a trabajar ...
usted no le dice ni en qué versiones de navegador que lo probaron.

0

Parece que recuerdo 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.

+0

Tengo un problema similar. La aplicación sirve la respuesta como utf-8 y en la forma en que se especifica accept-charset = "utf-8", pero con IE8 recupera los valores con un formato incorrecto. ¿Cuál es la mejor configuración para trabajar con formularios con Internet Explorer? Gracias. –

2

Si tiene acceso al servidor, convierta su procesamiento a UTF-8. El arte de enviar formularios que no sean UTF-8 es una historia larga y lamentable; esto document about forms and 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.

+1

Me importa mucho el soporte internacional, y me gustaría mantener mi aplicación en el mundo UTF-8, pero esta página debe enviarse en el servidor externo ISO-8859-1. –

6

Parece que esto no se puede hacer, al menos con las versiones actuales de IE (6 y 7).

IE admite el atributo accept-charset del atributo, 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.

+2

IE solo usa 'accept-charset' como 'copia de seguridad', cuando no ha podido codificar un campo en el juego de caracteres de la página. Especifique 'accept-charset' y no podrá decir qué codificación se utilizó. Por lo tanto, es completamente inútil; nunca debería ser usado. La única solución es, de hecho, cambiar el juego de caracteres de la página (o iframe) que contiene el formulario. – bobince

-2
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
36

No es un simple truco para esto:

insertar un campo de entrada oculto en el formulario con una entidad que sólo se producen en el conjunto de caracteres del servidor de su publicación (o hacer un GET) que acepta.

Ejemplo: Si el formulario se encuentra en un servidor que sirve ISO-8859-1 y la forma fija a un servidor esperando UTF-8 inserto algo como esto en la forma:

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

IE será entonces "detectar" que el formulario contiene un carácter UTF-8 y usa UTF-8 cuando POST o GET. Extraño, pero funciona.

+6

Esto no parece funcionar para la situación inversa. Publicación de un formulario que permanece en una página utf-8 en una página iso-8859-1 en otro servidor. – MaxiWheat

+1

Correcto, no funcionará en el otro sentido. Si especifica algo como "ÿ" que es el "más alto" Char en el juego de caracteres ISO-8859-1, obviamente este es un código UTF-8 también. Entonces, IE cree que es UTF-8. Por lo tanto, solo funciona cuando el juego de caracteres objetivo tiene una mayor cantidad de caracteres. – acme

+0

esto resolvió mi problema cuando IE8 e IE9 no respetaban accept-charset = 'utf-8', ¡gracias! –

1

Acabo de recibir 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 se podría hacer 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 
?> 
+1

Es una buena idea, pero esto puede ser bastante complicado si está intentando enviar información de inicio de sesión y necesita manejar cookies y demás. Esto podría hacerse con CURL, pero realmente es un dolor hacerlo funcionar. – acme

5

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- .

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

Así que esto funcionó para mí, ya que la norma ISO-8859-1 e ISO-8859-15 son casi los mismos.

+0

No. No funcionó para mí. – hrzafer

+0

no se puede confirmar que para IE 11 ... – Beat

1

Para los símbolos rusos ventanas-1251 '

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

Cuando simplemente convertir cadena a CP1251

$string = $_POST['string']; 
$string = mb_convert_encoding($string, "CP1251", "UTF-8"); 
+1

Aunque en sí mismo esto no responde a la pregunta en sí, creo que esta es una solución mucho mejor. De todos modos, siempre debe trabajar con UTF-8. Dicho esto, si crea un formulario que se envía a un servidor sobre el cual no tiene control, no funcionará de esta manera. –

30

Con navegadores decentes:

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

Con IE (cualquier):

document.charset = 'ISO-8859-1'; // do this before submitting your non-utf8 <form>! 
+5

Esto parece resolver el problema de IE (cuando JavaScript está habilitado en el navegador), y puede implementarlo utilizando el atributo 'onsubmit =" document.charset = 'ISO-8859-1' "' en la etiqueta 'form' . –

+0

El encabezado 'Accept-Charset' se utiliza para indicar al servidor qué conjunto de caracteres es aceptable como respuesta (consulte http://tools.ietf.org/html/rfc2616#section-14.2). Me parece que esta no es la forma correcta de especificar el juego de caracteres del documento enviado. Por estándar, esto se debe agregar como un parámetro 'charset' al tipo de contenido. Sin embargo, no estoy seguro de cómo especificar esto en formularios HTML: \ – exhuma

+0

Después de un poco más de búsqueda, encontré el [enctype] (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form # attr-enctype) atributo en el elemento de formulario. Siguiendo la descripción, esto parece más correcto. Sin embargo, aún no lo he probado. – exhuma

Cuestiones relacionadas