2009-02-16 24 views
55

Actualmente estoy codificando un sitio web francés. Hay una página de programación, donde un enlace en el lateral se puede utilizar para cargar el horario de otro día.jQuery AJAX Codificación de caracteres

Aquí está la JS que estoy usando para ello:

<script type="text/javascript"> 
    function load(y) { 
     $.get(y,function(d) { 
      $("#replace").html(d); 
      mod(); 
     }); 
    } 
    function mod() { 
     $("#dates a").click(function() { 
      y = $(this).attr("href"); 
      load(y); 
      return false; 
     }); 
    } 
    mod(); 
    </script> 

El AJAX real funciona como un encanto. Mi problema radica en la respuesta a la solicitud.

Como es un sitio web francés, hay muchas letras acentuadas. Estoy usando el juego de caracteres ISO-8859-15 por esa misma razón. Sin embargo, en la respuesta a mi solicitud de AJAX, los acentos se vuelven? Porque la codificación de caracteres parece cambiar a UTF-8.

¿Cómo puedo evitar esto? Ya he intentado añadir algo de PHP en la parte superior de los documentos solicitados para establecer el conjunto de caracteres:

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?> 

Pero eso no parece funcionar bien. ¿Alguna idea?

Además, mientras cualquiera de ustedes está buscando aquí ... ¿por qué la columna de la derecha parece reducirse cuando se carga una página nueva, causando que la tabla se distorsione y cada <li> dentro del <td> para pasar a la siguiente línea?

Saludos

Respuesta

22

se supone UTF-8 para manejar todos los acentos y caracteres extraños - por qué no usarlo en el origen de datos?

EDITAR
[Archive copy of the test file.] con sus datos

todo debe ser UTF-8 en el primer lugar. Cargué los archivos en Notepad ++, convertí a utf-8 y cambié manualmente los caracteres a los acentos necesarios. Una vez hecho, todo funciona como un amuleto.

BTW, a menos que su servidor esté definido para archivos .html de php-process, los archivos que está cargando con ajax no obtienen su juego de caracteres iso. Si insiste en usar el juego de caracteres iso, solicite un archivo php en lugar de un archivo html y defina el conjunto de caracteres en el encabezado (no en el archivo)

+0

No funciona. Aquí está la página con un conjunto de caracteres UTF-8: http://www.aquate.us/u/7183981145359693722.jpg Como puede ver, los acentos siguen siendo asesinados. – Salty

+0

Eso no debería suceder. ¿Cuál es tu fuente de datos? ¿Base de datos? Archivo de texto plano? – yoavf

+0

Eso no está con la fuente de datos, aunque pasa lo mismo. Eso es si solo carga una página HTML con acentos en un juego de caracteres UTF-8. – Salty

10

Debe configurar su servidor para usar ISO-8859- 15 como la codificación de caracteres (agregando el encabezado HTTP apropiado). Hacerlo en el cuerpo del html no ayudará.

puedo ver esta línea

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?> 

en el origen de su html. Esto no debería suceder. Utilizando Live HTTP Headers no puedo ver el encabezado HTTP de charset apropiado. Úselo tanto para su primera página como para el servicio de Ajax.

6

Al imprimir las variables en el archivo ajax. Poner un

htmlentities() 

Alrededor de ellos, ver si funciona. Trabajó para mí en una aplicación ajax de Islandia.

+0

Thanx Ólafur es una solución muy simple que simplemente funciona! – tvgemert

58

Especificar el tipo de contenido en la llamada AJAX resolvió mis problemas en un sitio noruego.

$.ajax({ 
     data: parameters, 
     type: "POST", 
     url: ajax_url, 
     timeout: 20000, 
     contentType: "application/x-www-form-urlencoded;charset=ISO-8859-15", 
     dataType: 'json', 
     success: callback 
}); 

También debe especificar el juego de caracteres en el servidor.

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?> 
+1

que es extraño, tuve que poner contentType: "application/x-www-form-urlencoded; charset = UTF-8" en mi llamada ajax (con el complemento de formulario jquery) para corregir la codificación de caracteres en mis páginas ISO-8859-1/servidor – jneira

+1

+1 ¡Gracias! Estaba tratando de encontrar la forma de especificar un tipo de contenido con ajax, como el chico de arriba para cambiar a UTF-8 y tú me diste exactamente lo que necesitaba. – gmustudent

+0

¡Gracias por esto! Al trabajar en un entorno Python/CGI, el encabezado que debía proporcionar en el servidor era el siguiente: 'print (" Content-Type: text/html; charset = ISO-8859-15 \ n ")' – sc28

0

he tenido el mismo problema con las páginas que:

  • Mostrar encima de multa cuando se le llama normalmente
  • tienen los caracteres especiales en mal estado cuando se le llama por medio de una petición Ajax

Para resolver el problema (usando php), utilicé utf8_encode() o htmlentities() en los datos de origen. Ambos funcionaron, los he usado en diferentes proyectos.

1

NO ACEPTO que todo deba ser UTF-8, puede hacerlo funcionar perfectamente con ISO 8859, lo hice, por favor lea mi respuesta aquí.

my response in stackoverflow

18
$str=iconv("windows-1250","UTF-8",$str); 

qué método() me ayudó en el tiempo

+0

Eres un héroe, esto me ayudó a enviar cartas acentuadas como é a través de una solicitud de AJAX. –

+0

funciona para mí gracias – Rajaraman

+0

salvó mi día ... Muchas gracias ... Esta debería ser la respuesta aceptada .. – meen

7

yo en una a sugerir el uso de la fuga Javascript

puede utilizar esto con jQuery por el acaparamiento de un valor formulario como ese:

var encodedString = escape($("#myFormFieldID").val()); 
+0

esto es lo que me ayudó con el hebreo (windows-1255) - gracias! – kneidels

4

Estaba teniendo si problemas similares, trabajando en un sistema de comentarios de contenido en nuestro portal en español. Lo que finalmente resolvió mi problema, después de muchas horas de búsqueda, en lugar de jugar con jQuery charset, que parece usar utf-8 sin importar qué, fue para decodificar desde utf-8 de nuevo a ISO-8859-1 en el PHP que procesado el POSTE ajax. En PHP hay una función integrada, utf8_decode(), por lo que la primera cosa que hago con la cadena de comentarios es la siguiente:

$comentario = utf8_decode($_POST['comentario']); 

(y luego utilizaron nl2br() y htmlentities() funciones de PHP con el fin de preparar el texto que se almacena con entidades html en lugar de caracteres especiales)

Buena suerte & ¡Paz en todas partes! Seba

3

He estado dando vueltas con este problema y descubrí que esta solución funciona para Firefox y Safari (sí, estoy en un Mac en este momento).

al conseguir la solicitud, hice un tipo de contenido = iso-8859-1 aquí:

if (window.XMLHttpRequest) { // Mozilla, Safari, ... 
    httpRequest = new XMLHttpRequest(); 
     if (httpRequest.overrideMimeType) { 
      httpRequest.overrideMimeType('text/xml; charset=ISO-8859-1'); 
     } 
    } 

por favor dígame si alguien se entera de esto no funciona en IE.

0

acaba de cambiar a {"type":"GET"}{"type":"POST"} y trabajó como un encanto con ISO-8859-1

7

para mi aplicación PHP que la solución era incluyen la función utf8_decode para cada variable en get $_POST.

Ej: (lado del servidor)

if(strtoupper($_SERVER['REQUEST_METHOD']) == "POST"){ 
$variable = htmlentities($_POST['variable']); // wrong 
$variable = htmlentities(utf8_decode($_POST['variable'])); // right 
} 

Abraços !!! (Bye Bye !!!)

+0

¡Gracias, Rafael! ¡Cacé durante años intentando cada sugerencia que pude encontrar y eventualmente esto lo resolvió para mí! utf8_decode era lo que faltaba! Gracias. – BruceHill

+0

Esto también solucionó mi problema, es genial tenerlo resuelto: D – trueheart78

0

Si toda la aplicación está utilizando la norma ISO-8859-1, puede modificar sus jquery.js reemplazar todas las apariciones de encodeURIComponent por escape (hay 2 ocurrencias para reemplazar en el script de jQuery actual - 1.5.1)

Ver encodeUIComponent y escape para más información

3

he tenido un problema similar con ASP con mis páginas. He resuelto así:

1) Insertado en el inicio del archivo ASP llamada por el método Ajax Jquery la instrucción:

Response.Charset = "windows-1252" 

en mi página del ASP antes de que el juego de caracteres no se definió y que había ahorrado mi archivo con codificación ANSI (con un editor de texto como notepad ++)

2) En el archivo hTML que llama al archivo ASP con el método jQuery ajax he insertado el tipo de contenido parámetro que ve a continuación:

$.ajax({   
data: parameters,   
type: "POST",   
url: ajax_url, 
datatype: 'html',   
contentType: "text/html;charset=windows-1252", 

En pocas palabras, es importante definir en su archivo ASP llamado juego de caracteres. Extrañamente, veo que mi jquery funciona con Windows-1252 pero no funciona con el juego de caracteres ISO-8859-1: en este caso, el método jquery ajax da una excepción.

1
<script type="text/javascript"> 
    function GetContent(idUser){ 
    $.ajaxSetup({ 
     url: 'ping.php' 
    }); 

    $.ajax({ 
     type: "POST", 
     url: "blablabla.php", 
     dataType: "text", 
     data: ({ParamUserID:idUser}),// here we def wich variabe is assiciated 
     contentType: "application/x-www-form-urlencoded; charset=iso-8859-1", 
     success: function(html) { 
     $('#user_specified_content').html(html); 
     } 
    });  
    } 
</script> 

Este es el script del que obtengo mi contenido de la página blabla.php.

Cuando recibo mis datos de éxito, mis acentos no aparecen.

he encontrado una super buena solución de trabajo por mi propia para ir a buscar los datos con acentos en los datos captados a partir .success función

En mi página blabla. Hice esto para brindar una solución a mi problema:

Utilizo utf8_encode(place your data here) en mi archivo php. Ver en acción a continuación:

while($row = sqlsrv_fetch_array($recordset)) 
{       
    <option value="<?php echo $row["xyz"]; ?>"><?php echo utf8_encode($row["gName"]) . ' | ' . utf8_encode($row["gManagerName"]); ?></option>       
} 
2

tuve un problema con las letras suecas/Noruega aparecer como signos de interrogación, a pesar de haber especificado:

contentType: "application/json; charset=utf-8", 

Esto se resolvió mediante la adición de encodeURIComponent a la cadena.

url: "/set_comment.do?text=" + encodeURIComponent(comment), 
0

Me he enfrentado el mismo problema y he intentado de varias maneras. Y encontré la solución. Si configura el encabezado de solicitud para "Aceptar" como a continuación;

$.ajax({ 
     data: parameters, 
     type: "POST", 
     url: ajax_url, 
     dataType: 'json', 
     beforeSend : function(xhr) { 
      xhr.setRequestHeader('Accept', "text/html; charset=utf-8"); 
     }, 
     success: callback 
}); 

verá que todos los personajes parece correcta

0

Vine a esta pregunta con exactamente el mismo problema que el autor de la pregunta. Las respuestas aquí son muy informativas, y probé casi todas y cada una de las respuestas sugeridas.Ninguna de las respuestas aquí funcionó para mí, podría haber habido una ligera diferencia en mi problema. Y ese parece ser el caso para muchos. Lo intenté mucho antes de terminar con una respuesta.

Así que ahora estoy agregando a la ya larga lista de respuestas, una solución propia que resolvió mi tipo de problema de codificación.

Hice solo dos cosas. En la secuencia de comandos de conexión de base de datos añadí:

mysql_set_charset('utf8',$connection); 

y aparte de eso:

  • He cambiado la codificación de todos los archivos a UTF-8

El punto es que todo debe ser de la misma codificación Y al crear nuevos archivos php, para las secuencias de comandos no basta con cambiar la codificación en la secuencia de comandos: el archivo en sí debe estar codificado correctamente.

0

Si está utilizando CodeIgniter puede resolver esto añadiendo el siguiente código al controlador antes de cargar las Vistas (suponiendo que tiene charset bien configurado en su configuración. Si no es así, sólo hay que poner charset=whateveryouwant.

$this->output->set_header('Content-type: text/html; charset='.$this->config->item('charset')); 

La forma en que lo hice fue agregar esa línea al constructor de MY_Controller, mi superclase para todos los controladores, así me aseguro de no tener problemas de codificación en ningún lado.

Por cierto, esto no afecta a JSON returns (que están codificados en UTF-8).

0

He intentado leer un archivo json/text local usando $ .ajax y la codificación no funcionó al principio ... Lo conseguí trabajando guardando el archivo json como codificación UTF-8. Esto se puede hacer simplemente con el Bloc de notas de Windows ... use "guardar como", y luego debajo del nombre del archivo puede establecer la codificación en UTF-8.

buena suerte!

2

Probé muchas sugerencias para leer en un archivo de texto con caracteres especiales alemanes (ä, ö, ü). Al final:

$.ajax({ 
     async:false, 
     type: "GET", 
     url: "data/FileName.txt", 
     dataType: "text", 
     contentType: "application/x-www-form-urlencoded;charset=UTF-8", 
     success: function (data) { 
      alert(data); 
     } 
    }); 

me dejó leer en los caracteres especiales, pero sólo después de que explícitamente salvados FileName.txt en el formato UTF-8. El formato estándar para guardar archivos de texto en el Editor de Windows es ANSI y no UTF-8, pero se puede cambiar si se "Guarda como" y usar el cuadro desplegable al lado del botón Guardar o usar un mejor Editor para Empezar con.

0

Tuve un problema similar. Tengo un archivo de texto con datos json que tiene texto en francés. Siempre hubo problemas al mostrar algunos personajes. En mi caso, el programa de JavaScript Ajax utiliza para recuperar el archivo de texto JSON de la siguiente manera: Los datos

$.ajax({ 
    async: false, 
    type: 'GET', 
    url: 'some-url', 
    success: function(data, status) { 
     mainController.constructionStageMaster = data.records; 
    } 
}); 

La devuelto siempre tenían las letras francesas acentuados incorrectas.

El texto JSON se ve de la siguiente manera:

{ 
    "records": [ 
     { 
      "StageDesc": "Excavation, Fondation et Bases", 
      "Allowed": 9, 
      "Completed": 0, 
      "TotalCompleted": "" 
     }, 
     { 
      "StageDesc": "Étanchement et Remblayage", 
      "Allowed": 3, 
      "Completed": 0, 
      "TotalCompleted": "" 
     }, 
     { 
      "StageDesc": "Encadrement et revêtement mural intermédiaire", 
      "StageDesc_fr": "Encadrement et revêtement mural intermédiaire np++", 
      "StageDesc_fr2": "Encadrement et revêtement mural intermédiaire", 
      "Allowed": 15, 
      "Completed": 0, 
      "TotalCompleted": "" 
     } 
     ... 
    ] 
} 

nota en los datos de las muestras anteriores, la tercera elemento, que coloca el texto con la correcta e incorrecta éê letras acentuadas francesas.

Para su información, parece que hay alguna configuración global del proyecto Eclipse que utiliza la codificación de caracteres ISO-8859-1. En tu caso, podría ser una codificación diferente.

Después de comprobar las soluciones de arriba y jugar un poco con el proyecto, esto es lo que resolvió mi problema:

  • encontrar la fuente del texto que tiene la correcta visualización del texto francés
  • Copiar el
  • texto
  • Goto Eclipse, abra el archivo de texto que tiene los datos
  • Haga clic en el archivo en el explorador, propiedades abiertas y cambiar la codificación a ISO-8859-1
  • Arregle el texto para que se muestre correctamente. Use copiar/pegar o el teclado
  • Puede que tenga que usar las teclas de flecha del teclado (izquierda/derecha) para asegurarse de que no haya letras ocultas que se mostrarán en HTML con una forma divertida. Eliminar dicha carta oculta
  • Guarde el archivo

Ahora, en mi caso, no ha indicado sus opciones de codificación en la llamada Ajax y trabaja muy bien. Además, si cambio la codificación del archivo de texto con datos json, aún así funcionaría bien.

Tarek

Cuestiones relacionadas