2010-07-20 4 views
4

Actuellement, mon site supporte l'anglais, le portugais, le suédois et le polonais. Mais pour une raison quelconque certains caractères polonais DonT montrer droit, comme Zal�z konto il devrait ressembler à ceci Zalóz kontocaractères polonais utf8 ne montrent pas à droite

Je cette

// Send the Content-type header in case the web server is setup to send something else 
header('Content-type: text/html; charset=utf-8'); 

et à l'intérieur <head>

<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
+3

D'où vous obtenez des textes polonais? Si à partir de la base de données, vous devez également définir l'encodage de la base de données après la fonction mysql_connect. – antyrat

+1

D'où proviennent vos données? Base de données? Assurez-vous que la connexion est définie sur UTF-8 (SET NAMES for MySQL). Codé en dur? Assurez-vous de sauvegarder le fichier avec l'encodage UTF-8. – igorw

+0

merci! J'ai enregistré le fichier avec utf8 – Remy

Répondre

2

si vous récupérez les données de MySQL base de données avec PHP, vous devez utiliser cette requête avant de faire quoi que ce soit ..

mysql_query("SET NAMES utf8");

Donc, les données reçues de db seront correctement codées, si elles ont été correctement stockés dedans ...

4

Vous devez convertir votre chaîne en UTF8 aussi. Utf8_encode() ne vérifie pas le codage de votre chaîne, et parfois il vous donne une chaîne foirée, donc j'ai fait une fonction appelée Encoding :: toUTF8() pour le faire correctement.

Vous n'avez pas besoin de connaître l'encodage de vos chaînes. Il peut être Latin1 (iso 8859-1), Windows-1252 ou UTF8, ou la chaîne peut avoir un mélange d'entre eux. Encoding :: toUTF8() va tout convertir en UTF8. Je l'ai fait parce qu'un service me donnait un flux de données tout foiré, mélangeant ces encodages dans la même chaîne.

Utilisation:

$utf8_string = Encoding::toUTF8($mixed_string); 

$latin1_string = Encoding::toLatin1($mixed_string); 

J'ai inclus une autre fonction, encodage :: fixUTF8(), Wich corrigera chaque chaîne UTF8 qui ressemble produit brouillées d'avoir été codé en UTF8 plusieurs fois.

Utilisation:

$utf8_string = Encoding::fixUTF8($garbled_utf8_string); 

Exemples:

echo Encoding::fixUTF8("Fédération Camerounaise de Football"); 
echo Encoding::fixUTF8("Fédération Camerounaise de Football"); 
echo Encoding::fixUTF8("FÃÂédÃÂération Camerounaise de Football"); 
echo Encoding::fixUTF8("Fédération Camerounaise de Football"); 

va afficher:

Fédération Camerounaise de Football 
Fédération Camerounaise de Football 
Fédération Camerounaise de Football 
Fédération Camerounaise de Football 

Télécharger:

http://dl.dropbox.com/u/186012/PHP/forceUTF8.zip

+0

cela devrait être marqué répondu – RCNeil

1

Vous pouvez également utiliser la norme iso-8859-1:

<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> 
Questions connexes