2010-07-11 14 views
3

Im faire un site pour vérifier, enregistrer, etc de domaines, je dois le rendre compatible IDN. En ce moment je quelque chose comme ceci:Comment puis-je coder et décoder les URL de IDN en php?

echo $domain;  
$domain = idn_to_ascii($domain); 
echo $domain; 
$domain = idn_to_utf8($domain); 
echo $domain; 

et im obtenir ceci:

testing123ásd123 xn - testing123sd123-WJB testing123ĂĄsd123

que vous pouvez voir la chaîne décodée ne est pas la même chose que l'original j'ai également essayé d'utiliser une classe par http://phlymail.com/en/downloads/idna/download/ pour le faire et obtenir les mêmes résultats im

J'ai essayé d'utiliser:

$charset="UTF-8"; 
echo $domain;  
$domain = idn_to_ascii($domain, $charset); 
echo $domain; 
$domain = idn_to_utf8($domain); 
echo $domain; 

et je suis exactement le même (sauf que la chaîne codée est légèrement différente)

des idées?

EDIT: Problème résolu! avec ce Problem in converting string to puny code (in PHP, using phlyLabs's punycode string converter) la chaîne originale était en iso-8859-2 et le décodé en UTF-8, maintenant je dois trouver comment le faire à nouveau iso-8859-2 mais google peut m'aider avec cela. Des mods? que devrais-je faire avec la question? fermez-le, effacez-le? laisse ça comme ça?

Répondre

3

Comme vous l'avez déjà souligné, ĂĄ semble être la représentation UTF8 du caractère á tel qu'affiché dans un document non-UTF8.

Vous pouvez utiliser iconv() pour convertir des jeux de caractères. Cependant, sachez que les jeux de caractères qui ne sont pas Unicode ne peuvent pas représenter l'ensemble complet des caractères internationaux et doivent donc convertir les caractères manquants en entités HTML. E.g .:

<?php 

$domain = idn_to_utf8($domain); 
echo htmlentities($domain, ENT_COMPAT, 'UTF-8'); 

?> 

Dans tous les cas, il serait probablement plus facile d'utiliser UTF-8 pour l'ensemble du projet.