IDN e HTTP_HOST

2

Então, quando eu quero vincular meus usuários a uma página específica, eu sempre uso (no PHP):

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

para garantir que o link aponta para a página em que ele está navegando no momento (e não para um dos aliases do servidor).

Mas com nomes de IDN, HTTP_HOST é definido como xn--hemmabst-5za.net (por exemplo) - o que obviamente funciona , mas não parece muito legal. Existe uma maneira de ter HTTP_HOST definido para o nome IDN correto nesses casos (nesse caso - hemmabäst.net )?

Eu prefiro fazê-lo no Apache antes de entrar no PHP, porque senão teria que substituir todo o meu uso de $_SERVER["HTTP_HOST"] .

Alguma idéia?

    
por Sandman 11.02.2010 / 20:26

2 respostas

2

Como o conjunto permitido de caracteres em um nome DNS é tão restrito, o nome de domínio real é o nome com os hífens nele. Então, o que você vê no HTTP_HOST é, na verdade, o nome correto. A tradução para unicode é um pouco de revestimento de açúcar aplicado para exibição somente quando o nome chega ao navegador (e nem mesmo para todos os navegadores). Qualquer trabalho que você queira fazer com a URL deve ser feito com a versão ASCII original (" punycode "), não a versão Unicode, ou as coisas podem não funcionar da maneira esperada.

Dito isso, se você quiser traduzir a versão do punycode do nome de domínio para o Unicode para fins de exibição em sua página da Web (presumivelmente usando PHP), use o Funções IDN do PHP .

    
por 29.08.2010 / 11:52
1

Não me cite, mas acho que não.

Acredito que seja o software cliente que converte o nome de domínio do formato IDN codificado pelo usuário para o formato ASCII para consultar os servidores DNS, portanto, quando ele é enviado pela rede para o servidor Apache, ele já foi convertido no chamado "punycode".

Suponho que você possa colocar algo na frente de seus scripts (ou até mesmo em um arquivo de cabeçalho pré-anexado - veja php.ini ) que converte xn--hemmabst-5za.net no formato original ( hemmabäst.net ) que seus scripts podem use (talvez escrevendo de volta em $_SERVER['HTTP_HOST'] ou em uma variável global.

Pode até haver algo lá fora capaz de fazer isso para você.

    
por 11.02.2010 / 20:40