Écrire une URL en ajoutant des paramètres

Lorsqu'on ajoute des paramètres à une URL, il faut que ceux-ci répondent à certains critères de mise en forme. Si vous n'ajoutez qu'un seul paramètre, vous passerez sans encombre la validation W3C. Par contre, si vous souhaitez ajouter plusieurs paramètres, la validation, soudain, vire au rouge (ceci pour autant que vous utilisez un DOCTYPE Xhtml 1.0 Strict) ! Dans cet article, nous verrons pourquoi la validation W3C ne supporte pas la multiplication des paramètres et comment peut-on remédier avec simplicité à ce tout petit problème ?

Selon la définition, une URL (Uniform Resource Locator ou, en français, localisateur uniforme de ressource) est une chaîne de caractère qui permet d'adresser les ressources du Web. C'est en utilisant ces URL qu'il est possible de charger une page web dans le navigateur, de consulter les différentes pages d'un site, de passer d'un site à un autre, etc. Mais lorsqu'on charge une page, il est également possible de lui transmettre des paramètres en les insérant dans l'URL.

Cette particularité se révèle très pratique lorsque vous voulez créer un site dynamique. En effet, le principe d'un site dynamique, c'est qu'un seul et même script (généralement écrit en PHP) génère une multitude de pages différentes. Ainsi, le script index.php peut non seulement générer la page d'accueil d'un site, mais aussi toutes les autres pages. Bien entendu, pour réaliser ce tour de pass-passe, il est nécessaire de transmettre des informations au script pour que celui-ci puisse générer ces différentes pages. Ces informations sont généralement transmises par l'intermédiaires de paramètres ajoutés à l'URL du site.

Voici, par exemple, comment construire une URL qui permettrait à un script de générer la page 34 d'un site :

http://www.lepetitatelier.be/index.php?page=34

Lorsque le script index.php est appelé par cette URL, il saura qu'il devra renvoyer au navigateur la page 34. En effet, il lui suffira de récupérer et de traiter le paramètre "page=34" à l'aide de la variable super-globale "$_GET['page']".

Précisons que, dans l'URL que nous venons de construire, la partie paramètre(s) qui se trouve à la fin de celle-ci commence par un point d'intérrogation ("?"). Ensuite, nous trouvons le mot "page" qui est le nom de la variable à transmettre au script. Celui-ci est suivit d'un signe égal ("=") qui a pour fonction de séparé le nom de la variable de sa valeur. Ici, la valeur de la variable page est égale à 34.

Comme nous l'avons déjà avancé dans notre introduction, cette URL insérée dans votre page ne posera aucun problème lorsque vous la soumettrez à la validation W3C.

Les choses se compliqueront lorsque vous voudrez multiplier les paramètres.

Pour comprendre la raison de cette soudaine réticence du validateur, voyons comment construire une URL contenant plusieurs paramètres. Pour cela, prenons l'exemple d'un URL dans laquelle nous souhaitons inclure un numéro de clé ("cle=21"), une option ("option=bruxelles") et un attribut ("attribut=0"). Voici ce que cela donne :

http://www.lepetitatelier.be/index.php?cle=21&option=bruxelles&attribut=0

Dans le script index.php, la valeur de la variable "cle" sera récupérée avec la super-globale "$_GET['cle']", ensuite la valeur de "option" se trouvera dans "$_GET['option']" et "attribut" dans "$_GET['attribut']".

Notons au passage que le nom des variables (ou des paramètres) ne peuvent pas contenir d'accents. Ainsi, le nom de la variable "clé" sera écrite "cle".

De même dans la valeur des variables, vous ne pourrez utiliser que des caractères alphanumériques sans accents. Si vous souhaitez inclure d'autres cacatères, vous devrez utiliser un codage particulier. Ainsi, la lettre "é" devra être codée "%E9" et donc le mot "été" s'écrira "%E9t%E9". De même une date que vous écririez "23/09/2009" devra être encodée sous la forme "23%2F09%2F2009".

Si vous travaillez en PHP, il existe une fonction "urlencode()" qui permet d'encoder les variables qui devront être ajouté à une URL. Une fois récupérées, ces variables pourront être décodées avec la fonction "urldecode()".

Pour en revenir à l'URL que nous avons construite en exemple, nous constatons que les différents paramètres sont séparés par une esperluette ("&"). Or, c'est justement de cette esperluette que viennent les réticences de la validation W3C.

Pourquoi ?

Tout simplement parce que dans le langage Html, l'esperluette est utilisée pour insérer des caractères spéciaux. Par exemple, le caractère copyright "©" doit être écrit "©" ou encore "©". Quant à l'esperluette elle-même, elle doit s'écrire "&" ou "&".

Donc, pour bien faire, si nous souhaitons que notre code réussisse brillamment la validation W3C, nous devrons réécrire notre URL. Voici deux variantes valides :

http://www.lepetitatelier.be/index.php?cle=21&option=bruxelles&attribut=0
http://www.lepetitatelier.be/index.php?cle=21&option=bruxelles&attribut=0

Pour terminer, signalons aux utilisateurs de PHP qu'ils ne doivent pas utiliser la fonction urlencode() sur l'ensemble de l'URL. En effet, si celle-ci contient plusieurs paramètres, la fonction d'encodage du PHP transformera aussi le codage de notre esperluette. Ainsi, si vous soumettez "&" à la fonction urlencode(), celle-ci renverra la chaîne "%26%2338%3B". Du coup, lorsque votre script recevra ces paramètres, ils ne seront pas répartis en plusieurs super-globales. Ce serait dommage !

Bon amusement !