Codificación de caracteres jQuery AJAX

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

Aquí está el JS que estoy usando para hacer esto:

 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();  

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

Debido a que 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 encoding de caracteres parece cambiar a UTF-8.

¿Cómo evito esto? Ya he intentado agregar algo de PHP en la parte superior de los documentos solicitados para establecer el juego de caracteres:

  

Pero eso tampoco parece funcionar. ¿Alguna idea?

Además, mientras cualquiera de ustedes está mirando aquí … ¿por qué la columna de la derecha parece hacerse más pequeña cuando se carga una página nueva, lo que hace que la tabla se distorsione y cada

  • dentro de la ajuste a la siguiente línea?

    Aclamaciones

    Se supone que UTF-8 maneja todos los acentos y caracteres extranjeros, ¿por qué no utilizarlo en su fuente de datos?

    EDITAR
    [ Archivar copia del archivo de prueba. ] con tus datos

    Todo debería ser UTF-8 en 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.

    Por cierto, a menos que su servidor esté definido para archivos .html de php-process, los archivos que está cargando con ajax no están obteniendo 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 juego de caracteres en el encabezado (no en el archivo).

  • 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 debería especificar el juego de caracteres en el servidor.

     < ?php header('Content-Type: text/html; charset=ISO-8859-15'); ?> 
     $str=iconv("windows-1250","UTF-8",$str); 

    lo que me ayudó en el eventual

    Debe configurar su servidor para usar ISO-8859-15 como encoding 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 la fuente de tu 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.

    Sugeriría fuertemente el uso del método javascript escape ()

    Puedes usar esto con jQuery al tomar un valor de formulario así:

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

    Para mi aplicación PHP, la solución fue incluir la función utf8_decode para cada variable get in $_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 !!! (¡¡¡Adiós!!!)

    Al imprimir las variables en el archivo ajax. Poner un

     htmlentities() 

    A su alrededor, fíjate si funciona. Trabajó para mí en una aplicación ajax de Islandia.

    Estaba teniendo 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 procesaba el POSTE ajax En PHP hay una función utf8_decode() , utf8_decode() , así que lo primero que hago con la cadena de comentarios es esto:

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

    (y luego nl2br() funciones de PHP nl2br() y htmlentities() para preparar el texto para ser almacenado con entidades html en lugar de caracteres especiales)

    Buena suerte y paz en todo! Seba

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

    al recibir la solicitud, hice un content-type = 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, dime si alguien se entera de que esto no funciona, es decir.

    Tuve un problema similar con ASP con mis páginas. Lo he resuelto así:

    1) Insertado al comienzo del archivo ASP llamado por el método Jquery ajax la instrucción:

     Response.Charset = "windows-1252" 

    En la página My asp antes del charset no estaba definido y había guardado mi archivo con encoding 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 parámetro content-type que ve a continuación:

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

    En resumen, 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.

    Tuve un problema con las letras suecas / noruegas que aparecían como signos de interrogación, a pesar de haber especificado:

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

    Esto fue resuelto agregando encodeURIComponent a la cadena.

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

    Intenté muchas sugerencias para leer en un archivo de texto con caracteres especiales alemanes (ä, ö, ü). En el 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); } }); 

    permítanme leer los caracteres especiales, pero DESPUÉS de que haya guardado explícitamente 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 “Guardar como” y usar el cuadro desplegable al lado del botón Guardar o usar un mejor Editor para empezar.

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

    mi respuesta en stackoverflow

      

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

    Cuando recibo mis datos sobre el éxito, mis acentos no aparecen.

    He encontrado una solución de trabajo muy buena por mi cuenta para buscar datos con acentos en los datos .success función .success

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

    Yo uso utf8_encode(place your data here) en mi archivo php. Véalo en acción a continuación:

     while( $row = sqlsrv_fetch_array($recordset) ) {  } 

    Si toda la aplicación está usando ISO-8859-1, puede modificar su jquery.js reemplazando todas las ocurrencias de encodeURIComponent por escape (hay 2 ocurrencias para reemplazar en la secuencia de comandos actual de jquery – 1.5.1)

    Vea encodeUIComponent y escape para más información

    Me he enfrentado al mismo problema y lo intenté 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ás que todos los personajes parecen correctos

    Llegué a esta pregunta con exactamente el mismo problema que el asker. 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 encoding.

    Hice solo dos cosas. En el script de conexión a la base de datos, agregué:

     mysql_set_charset('utf8',$connection); 

    y aparte de eso:

    • Cambié la encoding de todos los archivos a UTF-8

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

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

    He tenido el mismo problema con páginas que:

    • Se muestra bien cuando se lo llama normalmente
    • Tener los caracteres especiales en mal estado cuando se los llama a través de una solicitud de ajax

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

    Si está utilizando CodeIgniter, puede resolverlo agregando el siguiente código a su Controlador antes de cargar cualquier Vista (suponiendo que tenga un juego de charset correctamente configurado en su configuración. De lo contrario, simplemente ponga 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, de esta manera me aseguro de no tener problemas de encoding en ninguna parte.

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

    Intenté leer un archivo json / text local usando $ .ajax y la encoding no funcionó al principio … Lo conseguí trabajando guardando el archivo json como encoding 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 encoding en UTF-8.

    ¡buena suerte!

    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 progtwig de JavaScript usa Ajax para recuperar el archivo de texto json de la siguiente manera:

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

    Los datos devueltos siempre tenían letras francesas acentuadas 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édiair", "StageDesc_fr": "Encadrement et revêtement mural intermédiair np++", "StageDesc_fr2": "Encadrement et revêtement mural intermédiair", "Allowed": 15, "Completed": 0, "TotalCompleted": "" } ... ] } 

    Observe que en los datos de la muestra anterior, el tercer elemento, coloqué el texto con la ê é correcta e incorrecta con letras acentuadas en francés.

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

    Después de verificar las soluciones anteriores y jugar con el proyecto, esto es lo que resolvió mi problema:

    • Encuentre la fuente del texto que tiene la visualización correcta del texto en francés
    • Copia el texto
    • Goto Eclipse, abra el archivo de texto que contiene los datos
    • Haga clic derecho en el archivo en el explorador, abra las propiedades y cambie la encoding a ISO-8859-1
    • Repare 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 esa carta oculta
    • Guarda el archivo

    Ahora, en mi caso, no especifiqué ninguna opción de encoding en la llamada Ajax y funciona bien. Además, si cambio la encoding del archivo de texto con datos json, aún así funcionaría bien.

    Tarek