2010-05-20 62 views
7

Hace poco cambié algunas de mis páginas para mostrarlas a través de ajax y tengo cierta confusión sobre por qué la codificación utf8 ahora muestra un signo de interrogación dentro de un cuadro, mientras que antes no lo era. t.La codificación UTF8 no funciona cuando se usa ajax

Por ejemplo. La página de oringal era index.php. charset fue establecido explícitamente en utf8 y está en el <head>. Luego utiliza PHP para consultar la base de datos

Heres es la página index.php originales:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="en"> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
    <title>Title here</title> 
</head> 
<body class='body_bgcolor' > 

<div id="main_container"> 
    <?php 
     Data displayed via php was simply a select statement that output the HTML. 
    ?> 
</div> 

Sin embargo, cuando hice el cambio para agregar un menú que poblaron el "main_container" a través de AJAX todo el UTF-8 la codificación dejó de funcionar. Aquí está el nuevo código:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="en"> 
    <head> 
     <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
     <title>Title here</title> 
    </head> 
    <body class='body_bgcolor' > 
<a href="#" onclick="display_html('about_us');"> About Us </a> 

    <div id="main_container"></div> 

El "display_html()" función llama a la página de JavaScript que utiliza la llamada jQuery ajax para recuperar el HTML almacenado dentro de una página php, a continuación, coloca el código HTML dentro del div con un id de " main_container ". Estoy configurando el juego de caracteres en jquery para que sea utf8:

$.ajax({ 
     async: false, 
     type: "GET", 
     url: url, 
     contentType: "charset=utf-8", 
     success: function(data) 
      { 
       $("#main_container").html(data); 
      } 
}); 

¿Qué estoy haciendo mal?

+0

creo que es un problema ** ** BOM Byte marca de orden de http://www.google.it/search?hl=it&q= + Byte + Pedido + Marca + (BOM) & aq = f & aqi = & aql = & oq = & gs_rfai = –

Respuesta

6

La codificación es más que especificar la metaetiqueta y el tipo de contenido; los propios archivos deben estar realmente en la codificación que especifique, o obtendrá mojibake.

Compruebe que todo esté usando UTF-8, su base de datos, conexión de base de datos, columnas de tabla. Compruebe que los archivos estáticos que está incluyendo también están codificados en UTF-8.

+0

Ok, cambié todos mis archivos incluyendo todos los incluidos de ANSI a UTF-8. Miré la base de datos, pero no estoy seguro de estar buscando en el lugar correcto. Las columnas dicen en "COLLATION" "Latin1_swedish_ci" No estoy seguro de lo que esto significa. ¿De qué otra manera puedo verificar si las tablas/columnas db son utf-8? Además, después de guardar todos los archivos en utf-8 ahora aparece un error que dice '" No se puede enviar el limitador de caché de sesión - los encabezados ya se enviaron "' pero no cambié ningún código que no sea guardar el archivo como utf-8 y todo funcionó antes de hacer esto ... no estoy seguro de lo que está pasando. Gracias por su ayuda – Ronedog

+0

Como dicen los otros comentarios, esto tiene que ver con la marca de orden de bytes. Ver los otros enlaces de otros carteles, y también http://forum.mamboserver.com/showthread.php?t=42814 – mdma

+0

Ok, he leído todas esas otras publicaciones. Básicamente, dicen que hay un espacio o un nuevo carácter de línea antes del ' '. He revisado todo mi código y todo lo que incluye y aún obtengo el mismo resultado. Incluso eliminé cada bit de código de la página index.php, así que se veía así: ' '... no hay espacios antes o después ... no incluye otros archivos que puedan afectarlo Cuando recargo la página, obtengo el mismo mensaje de error. SIN EMBARGO, decidí volver a guardar la página index.php como ANSI, y el error desapareció, pero la codificación no fue buena ??? – Ronedog

1

Usted escribió

El "display_html()" función llama la página de JavaScript que utiliza jQuery llamada ajax para recuperar el html almacenado dentro de una página php

Qué hacer quieres decir con "el html almacenado dentro de una página php"? Si desea cargar datos y mostrarlos allí como un contenido de <div>, los datos cargados deben formatearse como corresponsal. Quiero decir que debería ser real un fragmento de código de HTML. Además, junto con 'contentType' sería una buena idea especificar 'dataType' como "html" o "text". Si no especifica nada, la última versión de jQuery "inteligentemente intentará obtener los resultados, según el tipo de respuesta MIME". Si conoce el 'tipo de datos', sería mejor especificar allí. Y si usa ajax use también por defecto 'async: true' y no 'false'.

También debe verificar si el método jQuery.load (consulte http://api.jquery.com/load/) es la mejor opción para usted. Puede cargar con la página mathod una html completa si es necesario y mostrar solo una parte de allí: $('#main_container').load('ajax/about_us.html #container');

Y sobre la codificación UTF-8 no se olvide de guardar el archivo realmente codificado en UTF-8. Use la opción correspondiente de su editor (en el Bloc de notas, seleccione "Guardar como" y luego elija como codificación "UTF-8" y no "ANSI").

+0

Lo bueno es recordar la configuración del editor. – Timo

0

Asegúrese de que todos sus archivos estén guardados como UTF-8 (o UTF-8 w.o. BOM).

Si las ha cargado por FTP o con una herramienta web, compruebe si todavía son UTF-8.

0

En mi caso ninguna de las soluciones funcionó hasta coloqué

header('Content-type: text/html; charset=utf-8'); 
Cuestiones relacionadas