如何在PHP中编码和解码IDN网址?

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;

我得到了完全相同的结果(除了编码字符串略有不同)。
有什么想法吗?
编辑: 问题已解决!使用此Problem in converting string to puny code (in PHP, using phlyLabs's punycode string converter),原始字符串是iso-8859-2,解码后为UTF-8,现在我需要找到如何再次将其转换为iso-8859-2,但Google可以帮助我解决这个问题。 有什么修改吗?我该怎么做?关闭它,删除它?保留它这样?
1个回答

3

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

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

<?php

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

?>

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接