因此,当我想将我的用户链接到我总是使用的特定页面时(在 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"]
.
有任何想法吗?
由于 DNS 名称中允许的字符集非常狭窄,因此实际的域名是包含连字符的名称。因此,您在 HTTP_HOST 中看到的实际上是正确的名称。转换为 unicode 是一种糖衣,仅当名称到达浏览器时才显示(甚至不是所有浏览器)。您想对 URL 进行的任何工作都应该使用原始 ASCII(“ punycode ”)版本,而不是 Unicode 版本,否则事情可能不会按您预期的方式进行。
也就是说,如果您想将域名的 punycode 版本转换为 Unicode 以便在您的网页中显示(可能使用 PHP),那么请使用PHP IDN 函数。
不要引用我的话,但我不这么认为。
我相信是客户端软件将域名从用户键入的 IDN 格式转换为 ASCII 格式以查询 DNS 服务器,因此当它通过线路发送到您的 Apache 服务器时,它已经被转换为 -称为“punycode”。
我想你也许可以在你的脚本的头部(或者甚至在一个前置的头文件 - 见
php.ini
)中放置一些东西,这些东西可以转换xn--hemmabst-5za.net
成你的脚本可以使用的原始格式(hemmabäst.net
)(也许将它写回$_SERVER['HTTP_HOST']
或写入一个全局变量) .甚至可能已经有一些东西可以为你做到这一点。