PHP et QUERY_STRING

Lors du développement d'un script basé sur le passage des noms de page d'un site par l'URL, je me suis aperçu d'une petite chose : PHP renomme les paramètres du type index.html en index_html pour une URL du type http://www.example.com/?index.html.

Après une petite recherche pour comprendre le phénomène, voici ce qu'il ressorte de la documentation PHP � ce sujet :

Typiquement, PHP ne modifie pas les noms des variables lorsqu'elles sont passées � un script. Cependant, il faut noter que les points (.) ne sont pas autorisés dans les noms de variables PHP. Pour cette raison, jetez un oeil sur :

$varname.ext;  /* nom de variable invalide */

Dans ce cas, l'analyseur croit voir la variable nommée $varname, suivie par l'opérateur de concaténation, et suivi encore par la chaîne sans guillemets (une chaîne sans guillemets, et qui n'a pas de signification particulière). Visiblement, ce n'est pas ce qu'on attendait...

Dans ce cas, le fait d'utiliser un « / » dans notre nom de variable est tout aussi incorrect ; en effet dans http://www.example.com/?test/mapage, la variable résutante serait $test/mapage qui est tout aussi invalide du point de vue PHP. Ici on chercherait � diviser le contenu de la variable $test par celui de la constante mapage qui ne sont défini ni l'un ni l'autre. Il en résulte deux erreurs de notice (variable et constante non définies) et une erreur de warning (division par zéro, bien entendu). Il faut bien noter que $_GET['test/mapage'] est bien défini tout comme pourrait l'être $_GET['index.html'] au final...

Drôle de façon de penser chez PHP, non ?

Posté le mardi 16 novembre 2004 dans .

Commentaires

Il n'y a aucun commentaire ; soyez le premier à déposer le vôtre.

Ajouter un commentaire

Il n'est plus possible de réagir à cette entrée directement mais si vous pensez que votre intervention peut être intéressante, envoyez-moi votre commentaire, je l'ajouterai ici en votre nom.