web-dev-qa-db-fra.com

les caractères spéciaux utf-8 ne s'affichent pas

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?

24
robert

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.

52
RCE

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.

6
hakre

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!

4
user2842936

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');
2
VVV

Je résous mon problème en utilisant utf8_encode ();

$ str = "kamé";

echo utf8_encode ($ str);

J'espère que cela aidera quelqu'un.

2
Kamran Sohail

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

1
Mauricio

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.

1
Binod

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">
0
Hiren Parghi