Le codage UTF8 ne fonctionne pas avec ajax

J’ai récemment changé certaines de mes pages pour qu’elles s’affichent via ajax et j’ai du mal à comprendre pourquoi l’encodage utf8 affiche maintenant un point d’interrogation à l’intérieur d’une boîte, alors qu’avant il ne l’était pas.

Par exemple. La page oringal était index.php. charset a été explicitement défini sur utf8 et se trouve dans . J’ai ensuite utilisé php pour interroger la firebase database

Voici la page index.php originale:

     Title here   

Cependant, lorsque j’ai apporté la modification, un menu contenant le “conteneur principal” via ajax a été arrêté. Tout l’encodage utf8 a cessé de fonctionner. Voici le nouveau code:

      Title here    About Us  

La fonction “display_html ()” appelle la page javascript qui utilise l’appel jquery ajax pour récupérer le code HTML stocké dans une page php, puis place le code HTML dans la div avec un identifiant de “main_container”. Je mets 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?

Le codage est plus que la spécification de la balise méta et du type de contenu: les fichiers eux-mêmes doivent être réellement dans le codage que vous spécifiez, sinon vous obtiendrez mojibake .

Vérifiez que tout utilise UTF-8, votre firebase database, votre connexion à la firebase database, vos colonnes. Vérifiez que tous les fichiers statiques que vous incluez sont également codés en UTF-8.

Tu as écrit

La fonction “display_html ()” appelle la page javascript qui utilise l’appel jquery ajax pour récupérer le code HTML stocké dans une page php

Que voulez-vous dire par “le HTML stocké dans une page php”? Si vous souhaitez charger des données et les afficher sous forme de

les données chargées doivent être au format correspondant. Je veux dire que ce devrait être réel un fragment de code de HTML. De plus, en association 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 “essayera intelligemment d’obtenir les résultats, en fonction du type MIME de la réponse”. Si vous connaissez le ‘type de données’, il serait préférable de le spécifier. Et si vous utilisez ajax, utilisez également la valeur par défaut ‘async: true’ et non ‘false’.

Vous devez é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 n’en afficher qu’une partie: $('#main_container').load('ajax/about_us.html #container');

Et à propos du codage UTF-8, n’oubliez pas de sauvegarder le fichier vraiment codé UTF-8. Utilisez l’option correspondante de votre éditeur (dans le Bloc-notes, choisissez “Enregistrer sous” puis choisissez le codage “UTF-8” et non “ANSI”).

Assurez-vous que tous vos fichiers sont enregistrés au format UTF-8 (ou UTF-8 sans nomenclature).

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

Dans mon cas, aucune des solutions n’a fonctionné jusqu’à ce que je place

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