IDN и HTTP_HOST

Поэтому, когда я хочу связать своих пользователей с определенной страницей, которую я всегда использую (в PHP):

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

чтобы убедиться, что ссылка указывает на страницу, на которой они в данный момент работают (а не на псевдонимы сервера).

Но с именами ИДИ, HTTP_HOST установлен в xn--hemmabst-5za.net (например) - что, конечно, работает, но выглядит не очень красиво. Есть ли способ иметь HTTP_HOST установить правильное имя IDN в этих случаях (в данном случае - hemmabäst.net)?

Я предпочитаю делать это в Apache, прежде чем он перейдет к PHP, потому что в противном случае мне пришлось бы заменить все мое использование $_SERVER["HTTP_HOST"],

Есть идеи?

2 ответа

Поскольку допустимый набор символов в имени 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'] или в глобальную переменную.

Там может даже быть что-то, уже способное сделать это для вас.

Другие вопросы по тегам