J'ai déplacé mon site Web de mon serveur de test local vers l'hébergement partagé NameCheap et maintenant je rencontre un problème - certaines pages n'affichent pas correctement les caractères spéciaux utf-8 (affichant des points d'interrogation à la place). Toutes les pages sont encodées en utf-8, comme toutes les tables de base de données. Ce qui est étrange, c'est que certaines pages s'affichent correctement et d'autres non, de façon apparemment aléatoire.
Par exemple, ma page d'index est correcte, mais pas ma page de profil. faq.html fonctionne très bien, mais quand je le renomme en faq.php, ce n'est pas le cas. Et le plus étrange de tous, j'ai une page avec deux onglets JQuery où l'un s'affiche correctement et l'autre pas!
Est-ce que quelqu'un peut m'aider avec ça?
C'est vraiment un problème ennuyeux à résoudre, mais vous pouvez les essayer.
Tout d'abord, assurez-vous que le fichier est bien enregistré au format UTF-8.
Vérifiez ensuite que vous avez <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
Dans votre en-tête HTML.
Vous pouvez également essayer d'appeler header('Content-Type: text/html; charset=utf-8');
au début de votre script PHP ou en ajoutant AddDefaultCharset UTF-8
À votre fichier .htaccess.
Cela ressemble à ça si vous demandez faq.html
le serveur Web signale à votre navigateur que le fichier est au format UTF-8.
Vérifiez qu'avec votre navigateur l'encodage annoncé et utilisé, veuillez consulter la documentation de votre navigateur pour savoir comment procéder. Chaque navigateur a cela, le plus souvent accessible via le menu (pour spécifier votre préférence quel encodage de site Web doit être utilisé) et pour voir ce que le serveur a retourné, vous le trouvez souvent dans les propriétés de la page.
Alors ça sonne comme ça si vous demandez faq.php
le serveur Web indique à votre navigateur que le fichier est dans un autre encodage. Aucun jeu de caractères/encodage n'est probablement fourni par défaut PHP. Comme il s'agit d'un fichier PHP, vous pouvez le plus souvent résoudre ce problème en modifiant le PHP default_charset
Documents directive:
default_charset = "UTF-8"
Localisez votre php.ini sur l'hôte et modifiez-le en conséquence.
Si vous n'avez pas le php.ini disponible, vous pouvez également le modifier par code en utilisant ini_set
Documents fonction:
ini_set('default_charset', 'UTF-8');
Veillez à changer cela très tôt dans votre script car PHP doit pouvoir envoyer des en-têtes pour que cela fonctionne, et les en-têtes ne peuvent plus être définis s'ils ont déjà été envoyés .
Envoi manuel du Content-Type
la ligne d'en-tête fonctionne aussi:
header('Content-Type: text/html; charset=UTF-8');
De plus, il est recommandé que toutes les pages HTML que vous produisez aient également cet en-tête dans leur code HTML <head>
section:
<html>
<head>
...
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
...
J'espère que cela vous sera utile.
définir la balise meta dans la tête comme
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
utilisez le lien http://www.i18nqa.com/debug/utf8-debug.html pour remplacer le caractère de symboles que vous souhaitez.
puis utilisez str_replace comme
$find = array('“', '’', '…', '—', '–', '‘', 'é', 'Â', '•', 'Ëœ', 'â€'); // en dash
$replace = array('“', '’', '…', '—', '–', '‘', 'é', '', '•', '˜', '”');
$content = str_replace($find, $replace, $content);
C'est la méthode que j'utilise et aide beaucoup. Merci!
Si vous utilisez PHP et rien de ce qui précède n'a fonctionné (comme c'était mon cas), vous devez définir les paramètres régionaux avec l'encodage utf-8.
Comme ça
setlocale(LC_ALL, 'fr_CA.utf-8');
Je résous mon problème en utilisant utf8_encode ();
$ str = "kamé";
echo utf8_encode ($ str);
J'espère que cela aidera quelqu'un.
Le problème est que votre fichier n'est pas avec le même encodage. Exécutez d'abord la commande suivante dans tous vos fichiers:
file -i filename.*
Afin de résoudre le problème, vous devez modifier tous vos fichiers en uft-8. Vous pouvez le faire avec la commande iconv:
iconv -f fromcode -t tocode filename > newfilename
Exemple:
iconv -f iso-8859-1 -t utf-8 index.html > fixed/index.html
Après cela, vous pouvez exécuter le fichier -i fixedx/index.html et vous verrez que votre fichier est maintenant en uft-8
Si toutes les autres réponses n'ont pas fonctionné pour vous, essayez désactivation de la traduction d'encodage d'entrée HTTP.
Il s'agit d'un paramètre lié à PHP extension mbstring. C'était le problème dans mon cas. Ce paramètre a été activé par défaut sur mon serveur.
L'ajout de la ligne suivante dans la balise head a résolu mon problème.
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">