我怎么能在PHP中编码和解码来自IDN的网址?

时间:2010-07-11 02:23:06

标签: php url internationalization idn punycode

我正在做一个网站检查,注册等域名,我必须使其符合IDN标准。 现在我有这样的事情:

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

并且我得到了这个:

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

正如你可以看到解码后的字符串与原始字符串相同我也尝试使用http://phlymail.com/en/downloads/idna/download/类来完成它并获得相同的结果

我尝试过使用:

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

我完全一样(除了编码的字符串略有不同)

任何想法?

编辑: 问题解决了!这个Problem in converting string to puny code (in PHP, using phlyLabs's punycode string converter) 原始字符串在iso-8859-2中,并在UTF-8中解码,现在我需要找到如何再次使它成为iso-8859-2,但谷歌可以帮助我。 任何mods?该怎么办?关闭它,擦除它?这样离开吗?

1 个答案:

答案 0 :(得分:3)

正如您已经指出的那样,ĂĄ似乎是非UTF8文档中显示的á字符的UTF8表示。

您可以使用iconv()在字符集之间进行转换。但是,请注意,非Unicode的字符集不能表示完整的国际字符集,因此必须将缺少的字符转换为HTML实体。 E.g:

<?php

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

?>

无论如何,在整个项目中使用UTF-8可能更容易。