2 votes

IDN et HTTP_HOST

Ainsi, lorsque je veux lier mes utilisateurs à une page spécifique, j'utilise toujours (en PHP) :

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

pour s'assurer que le lien pointe bien vers la page sur laquelle ils sont en train de naviguer (et non vers l'un des alias du serveur).

Mais avec des noms IDN, HTTP_HOST est réglé sur xn--hemmabst-5za.net (par exemple) - qui bien sûr travaux mais ça n'a pas l'air très joli. Existe-t-il un moyen d'avoir HTTP_HOST défini au nom IDN correct dans ces cas-là (dans ce cas - hemmabäst.net ) ?

Je préfère le faire dans Apache avant de le faire en PHP car sinon je devrais remplacer toutes mes utilisations de $_SERVER["HTTP_HOST"] .

Des idées ?

1 votes

Avez-vous réellement besoin de vous référer à $_SERVER["HTTP_HOST"] ? Ne pouvez-vous pas simplement créer des liens relatifs ?

2voto

tylerl Points 14785

Étant donné que l'ensemble des caractères autorisés dans un nom DNS est si restreint, le nom de domaine proprement dit es le nom avec les traits d'union. Ainsi, ce que vous voyez dans HTTP_HOST est, en fait, le nom correct. La traduction en unicode est un peu de sucre appliqué pour l'affichage seulement quand le nom arrive au navigateur (et même pas par tous les navigateurs). Tout travail que vous voulez faire avec l'URL doit être fait avec l'ASCII original (" punycode "), et non la version Unicode, ou les choses pourraient ne pas fonctionner comme vous l'aviez prévu.

Cela dit, si vous souhaitez traduire la version punycode du nom de domaine en Unicode à des fins d'affichage sur votre page web (probablement à l'aide de PHP), utilisez la fonction Fonctions PHP IDN .

1voto

Andy Shellam Points 1830

Ne me cite pas, mais je ne pense pas.

Je crois que c'est le logiciel client qui convertit le nom de domaine du format IDN saisi par l'utilisateur au format ASCII pour interroger les serveurs DNS, de sorte que lorsqu'il est envoyé par câble à votre serveur Apache, il a déjà été converti en "punycode".

Je suppose que vous pourriez être en mesure de mettre quelque chose en tête de vos scripts (ou même dans un fichier d'en-tête pré-intégré - cf. php.ini ) qui convertit xn--hemmabst-5za.net dans le format original ( hemmabäst.net ) que vos scripts peuvent utiliser (peut-être en le réécrivant dans le fichier $_SERVER['HTTP_HOST'] ou dans une variable globale.

Il existe peut-être même quelque chose qui est déjà capable de le faire pour vous.

0 votes

Oui, je me rends compte que tout est fait côté client, mais j'espérais qu'il pourrait être décodé côté serveur également. Donc ok si je dois le faire en PHP, alors maintenant je dois trouver une fonction PHP sympa qui le reconvertit... Merci !

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X