2010-05-20 3 views
7

J'ai récemment modifié certaines de mes pages pour les afficher via ajax et j'ai une certaine confusion quant au fait que l'encodage utf8 affiche maintenant un point d'interrogation à l'intérieur d'une boîte, alors qu'avant t.L'encodage UTF8 ne fonctionnait pas lors de l'utilisation d'ajax

Pré exemple. La page oringale était index.php. charset a été défini explicitement sur utf8 et se trouve dans le <head>. J'ai ensuite utilisé php pour interroger la base de données

Heres est la page index.php originale:

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

Cependant, quand je fait le changement d'ajouter un menu qui a peuplé la « main_container » via ajax tous les UTF8 l'encodage a cessé de fonctionner. Voici le nouveau code:

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

La fonction « display_html() » appelle la page javascript qui utilise l'appel ajax jquery pour récupérer le code HTML stocké dans une page php, puis place le code html à l'intérieur du div avec un id de " main_container ". Je configure le jeu de caractères dans jquery pour être utf8 comme:

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

Qu'est-ce que je fais mal?

+0

je pense est un ** BOM ** Byte Order Mark problème http://www.google.it/search?hl=it&q= + Byte + Order + Mark + (BOM) & aq = f & aqi = & aql = & oq = & gs_rfai = –

Répondre

6

L'encodage est plus que la spécification de la méta-étiquette et du type de contenu - les fichiers eux-mêmes doivent vraiment être dans l'encodage que vous spécifiez, sinon vous obtiendrez mojibake.

Vérifiez que tout utilise UTF-8, votre base de données, la connexion à la base de données, les colonnes de table. Vérifiez que tous les fichiers statiques que vous incluez sont également encodés en UTF-8.

+0

Ok, j'ai changé tous mes fichiers, y compris tous les inclusions de ANSI à UTF-8. J'ai regardé la base de données, mais je ne suis pas sûr que je regarde au bon endroit. Les colonnes disent sous "COLLATION" "Latin1_swedish_ci" Je ne sais pas ce que cela signifie cependant. Sinon, comment puis-je vérifier si les tables/colonnes db sont utf-8? De plus, après avoir sauvegardé tous les fichiers sur utf-8, j'obtiens une erreur indiquant "Impossible d'envoyer le limiteur de cache de session - en-têtes déjà envoyés" mais je n'ai pas modifié le code sauf utf-8 et tout a fonctionné avant que je l'ai fait ... pas sûr que ce qui se passe. Merci pour votre aide – Ronedog

+0

Comme les autres commentaires disent, c'est à voir avec la marque de commande d'octet. Voir les autres liens d'autres affiches, et aussi http://forum.mamboserver.com/showthread.php?t=42814 – mdma

+0

Ok, j'ai lu tous ces autres messages. Fondamentalement, ils disent qu'il y a un espace ou un nouveau caractère de ligne soit avant le '. J'ai parcouru tout mon code et tous les inclus et toujours obtenir le même résultat. J'ai même supprimé tous les bits du code de la page index.php, donc ça ressemblait à ça: ' '... aucun espace avant ou après ... pas d'autres fichiers qui pourraient l'affecter Lorsque je recharge la page, je reçois le même message d'erreur. TOUJOURS, j'ai décidé de réenregistrer la page index.php comme ANSI, et l'erreur est partie, mais l'encodage n'était pas bon ??? – Ronedog

1

Vous avez écrit

Le "display_html()" fonction appelle la page javascript qui utilise jquery appel ajax pour récupérer le code HTML stocké à l'intérieur d'une page php

Qu'est-ce que vous voulez dire avec "le html stocké dans une page php"? Si vous souhaitez charger des données et les afficher en tant que contenant <div>, les données chargées doivent être formées de manière correspondante. Je veux dire qu'il devrait être réel un fragment de code de HTML. De plus, avec 'contentType', il serait judicieux de spécifier 'dataType' comme "html" ou "text". Si vous ne spécifiez rien, la dernière version de jQuery "essaiera intelligemment d'obtenir les résultats, en fonction du type MIME de la réponse". Si vous connaissez le 'dataType', il vaudrait mieux le spécifier. Et si vous utilisez ajax utilisez aussi par défaut 'async: true' et non 'false'.

Vous devriez également vérifier si la méthode jQuery.load (voir http://api.jquery.com/load/) est le meilleur choix pour vous. Vous pouvez charger avec le mathod une page html complète si nécessaire et afficher seulement une partie de celui-ci: $('#main_container').load('ajax/about_us.html #container');

Et à propos de l'encodage UTF-8 ne pas oublier d'enregistrer le fichier vraiment UTF-8 codé. Utilisez l'option correspondante de votre éditeur (dans le Bloc-notes, choisissez "Enregistrer sous", puis choisissez comme encodage "UTF-8" et non "ANSI").

+0

Bonne chose à rappeler le réglage de l'éditeur. – Timo

0

Assurez-vous que tous vos fichiers sont sauvegardés en UTF-8 (ou UTF-8 avec nomenclature).

Si vous les avez téléchargés par FTP ou avec un outil Web, vérifiez s'ils sont toujours en UTF-8.

0

Dans mon cas, aucune des solutions élaborées jusqu'à ce que je mis

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