3

我正在做一个网站来检查、注册等域,我必须使其符合 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;

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

有任何想法吗?

编辑:问题解决了!在将字符串转换为 puny 代码时遇到此问题(在 PHP 中,使用 phlyLabs 的 punycode 字符串转换器) 原始字符串在 iso-8859-2 中并在 UTF-8 中解码,现在我需要找到如何使其成为 iso-8859- 2 再次,但谷歌可以帮助我。有什么模组吗?我该怎么处理这个问题?关闭它,删除它?就这样吧?

4

1 回答 1

3

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

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

<?php

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

?>

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

于 2010-07-11T11:07:04.177 回答