所以,当我想将用户链接到特定的页面时,我总是使用(在PHP中):
"http://" . $_SERVER["HTTP_HOST"] . "/page.php"
确保链接指向他们正在浏览的页面(而不是其中一个服务器别名)。
但是对于IDN名称, HTTP_HOST被设置为xn--hemmabst-5za.net (例如) – 这当然可行,但看起来不太好。 有没有办法让HTTP_HOST在这些情况下设置为正确的IDN名称(在这种情况下 – hemmabäst.net )?
我宁愿在Apache之前,它涉及到PHP,否则我将不得不全部replace$_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']或写入一个全局variables。
甚至有可能已经有能力为你做这件事了。