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']
или в глобальную переменную.
Там может даже быть что-то, уже способное сделать это для вас.