web-dev-qa-db-ja.com

IDNとHTTP_HOST

したがって、ユーザーを特定のページにリンクしたい場合は、常に(PHPで)使用します。

"http://" . $_SERVER["HTTP_Host"] . "/page.php"

リンクが現在閲覧しているページを指していることを確認します(サーバーエイリアスの1つではありません)。

しかし、IDN名の場合、HTTP_Hostxn--hemmabst-5za.netに設定されます(たとえば)-もちろん動作しますですが、見栄えはよくありません。これらの場合(この場合は-HTTP_Host)、hemmabäst.netを正しいIDN名に設定する方法はありますか?

PHPになる前に、Apacheでそれを行います。そうしないと、$_SERVER["HTTP_Host"]のすべての使用法を置き換える必要があるためです。

何か案は?

2
Sandman

DNS名で許可される文字のセットは非常に狭いため、実際のドメイン名ハイフンを含む名前です。したがって、HTTP_Hostに表示されるのは、実際には正しい名前です。 Unicodeへの変換は、名前がブラウザに到達したときにのみ表示されるように適用される少しの砂糖コーティングです(すべてのブラウザでさえも)。 URLで行いたい作業は、Unicodeバージョンではなく、元のASCII( "punycode")バージョンで行う必要があります。物事が期待どおりに機能しない場合があります。

とは言うものの、Webページ内で表示する目的で(おそらくPHPを使用して)ドメイン名のpunycodeバージョンをUnicodeに変換する場合は、 PHP IDN関数 を使用します。

2
tylerl

私を引用しないでください、しかし私はそうは思いません。

ドメイン名をユーザーが入力したIDN形式からASCII形式に変換してDNSサーバーにクエリを実行するのは、クライアントソフトウェアだと思います。そのため、ドメイン名がネットワーク経由でApacheに送信されるとサーバー、それはすでにいわゆる「punycode」に変換されています。

php.iniを元の形式(xn--hemmabst-5za.net)に変換する何かをスクリプトの先頭に(または先頭に追加されたヘッダーファイルに-hemmabäst.netを参照)置くことができるかもしれないと思います。スクリプトで使用できます(おそらく、スクリプトを$_SERVER['HTTP_Host']またはグローバル変数に書き戻します。

あなたのためにこれを行うことができる何かがすでにそこにあるかもしれません。

1
Andy Shellam