Итак, когда я хочу связать своих пользователей с определенной страницей, я всегда использую (в 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']
или в глобальную переменную.
Возможно, что-то там уже может сделать это за вас.