Administrateur PHPfrance |
3088 Messages
20 avr. 2008, 17:43
En règle générale, je déconseille d'essayer d'être plus malin que PHP et faire un couteau suisse de n'importe quelle fonction. En l'occurence, il y a plusieurs points qui me chagrinent.
La fonction de parse_url() est de décomposer une URL, pas de l'interpréter. Si on se réfère à la
RFC 2616 section 3.2.2, une URL est composée de la sorte :
http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query
Tout ce qui se trouve après le
? est le "query string". La RFC 2616 se garde d'indiquer comment construire ce(tte)
query string, à chaque langage de définir sa méthode. La plupart des gens sous PHP utilisent le caractère
& pour séparer les variables, mais ce n'est pas quelque chose d'obligatoire. On peut notamment le modifier via le réglage
arg_separator.input de php.ini. D'ailleurs, PHP offre déjà une fonction pour interpréter ce
query string, parse_str().
De plus, dans ta fonction wd_parse_url() tu tentes de deviner si l'URL passée a été contient des entités HTML. C'est une autre pratique que je déconseille, parce que deviner implique de se tromper parfois. Si tu as une URL avec du HTML dedans, "décode" le HTML et passe le résultat à la fonction. Sinon, on court le risque de faux-positif.
Finalement, la fonction propose d'encoder le résultat dans l'encodage de son choix... mais à partir de quel encodage ? Sans connaître l'encodage de départ, impossible de convertir. J'ai peur que ce genre d'options renforce la croyance erronée qu'il est possible de connaître l'encodage d'une chaîne en PHP<6. Malheureusement, ça ne l'est pas et il n'existe pas, à ma connaissance, de méthode pour connaître l'encodage d'une requête GET. (à part les méthodes de détection heuristique comme mb_detect_encoding())
C'est pour toutes ces raisons que je déconseille d'en faire plus que nécessaire. PHP propose un outil pour chaque situation, essayer d'en faire une sorte de super-couteau suisse rend au final les choses plus compliquées et peut s'avérer dangereux.
Désolé de paraître si négatif, hein
