2010-08-22 11 views
3

J'utilise $encoding = 'utf-8'; en gettext et dans mon code html j'ai mis <meta charset="utf-8">. J'ai également mis utf-8 dans mes fichiers .po, mais je reçois toujours quand j'écris æøå! Qu'est-ce qui peut être mauvais?obtenir quand pour les caractères spéciaux en utilisant gettext et smarty

+3

Avez-vous enregistré la page au format UTF-8? –

+0

Que voulez-vous dire? J'ai enregistré la page en tant que .php ou .tpl – ganjan

+0

Utilisez-vous des fonctions comme 'substr()'? Si oui, remplacez-les en ajoutant 'mb_' à l'avant. http://dk.php.net/manual/fr/ref.mbstring.php – bancer

Répondre

4

Voyons comment les valeurs que vous mentionnez sont au niveau de l'octet.

J'ai copié le æøå de votre question et � de votre titre. La raison pour � est que j'ai dû utiliser une application console Windows pour aller chercher le titre de votre question et que sa page de codes était Windows 1252 (la copie à partir du navigateur m'a donné Unicode Character 'REPLACEMENT CHARACTER' (U+FFFD)).

Dans un script codé en UTF-8, cela donne:

<?php 
$s = 'æøå'; 
$s2 = '�'; 

echo "s iso-8859-1 ", @reset(unpack("H*", mb_convert_encoding($s, "ISO-8859-1", "UTF-8"))), "\n"; 
echo "s2 win-1252 ", @reset(unpack("H*", mb_convert_encoding($s, "WINDOWS-1252", "UTF-8"))), "\n"; 
 
s iso-8859-1 e6f8e5 
s2 win-1252 e6f8e5 

Ainsi, la représentation des octets correspond. Le problème est que lorsque vous écrivez æøå soit:

  • Vous écrire dans ISO-8859-1, au lieu de UTF-8. Vérifiez votre éditeur de texte.
  • La valeur est en cours de conversion de UTF-8 à ISO-8859-1 (peu probable)
+0

notepad plus -> encodage -> encoder en utf-8 merci :) – ganjan

+0

Artefacto: Pourquoi voyez-vous un '�' dans le Titre? Cette page est déclarée être encodée avec UTF-8, vous devez changer le codage manuellement à ISO 8859-1 pour avoir cette sortie. – Gumbo

+0

@Gumbo Vous avez raison; ça ne m'est pas venu à l'esprit, mais ça marche (au moins dans Opera 10.61/Windows). En passant, je trouve bizarre que changer manuellement l'encodage en ISO-8859-1 fait que le navigateur l'interprète comme win-1252, mais je suppose que c'est juste une compatibilité bizarre (je pense que la spécification HTML 5 dit spécifiquement pour interpréter les pages déclare être ISO-8859-1 en tant que win-1252). – Artefacto

3

Vous devez définir cette

bind_textdomain_codeset ($ domain, "UTF-8");

Sinon, vous obtiendrez le caractère