因此,当我想将我的用户链接到特定页面时,我总是使用(在 PHP 中):
"http://" . $_SERVER["HTTP_HOST"] . "/page.php"
确保链接指向他们当前正在浏览的页面(而不是服务器别名之一)。
但对于 IDN 名称,HTTP_HOST
设置为xn--hemmabst-5za.net
(例如) - 当然作品但看起来不太好看。HTTP_HOST
在这些情况下(在本例中为 - ),有没有办法设置正确的 IDN 名称hemmabäst.net
?
我宁愿在 PHP 之前在 Apache 中执行此操作,因为否则我必须替换我所有的使用$_SERVER["HTTP_HOST"]
。
有任何想法吗?
答案1
由于 DNS 名称中允许的字符集非常狭窄,因此实际域名是名称中包含连字符。因此,您在 HTTP_HOST 中看到的实际上是正确的名称。转换为 unicode 只是一种美化,仅当名称到达浏览器时才显示(甚至不是所有浏览器都这样)。您要对 URL 进行的任何操作都应使用原始 ASCII(“域名代码“) 版本,而不是 Unicode 版本,否则事情可能无法按您预期的方式运行。
也就是说,如果你想将域名的 punycode 版本转换为 Unicode 以便在你的网页中显示(可能使用 PHP),那么使用PHP IDN 函数。
答案2
别引用我的话,但我不这么认为。
我相信客户端软件会将域名从用户输入的 IDN 格式转换为 ASCII 格式,以便查询 DNS 服务器,因此当它通过网络发送到 Apache 服务器时,它已经被转换为所谓的“punycode”。
我想您可能能够在脚本的头部(或者甚至在前置的头文件中 - 参见php.ini
)放置一些内容,将其转换xn--hemmabst-5za.net
为脚本可以使用的原始格式hemmabäst.net
(也许将其写回$_SERVER['HTTP_HOST']
或写入全局变量)。
甚至可能已经有某种东西能够为您做到这一点。