Назад | Перейти на главную страницу

IDN и HTTP_HOST

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

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

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

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

Я предпочитаю делать это в Apache, прежде чем дело дойдет до PHP, потому что в противном случае мне пришлось бы заменить все мое использование $_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'] или в глобальную переменную.

Возможно, что-то там уже может сделать это за вас.