2015-04-15 2 views
0

Dans mon ap_hook_handler, je rencontre un comportement étrange avec request_rec-> args lorsque des parties de la chaîne de requête contiennent des entités codées en url.Le module Apache request_rec-> args ne peut pas gérer les entités codées url

Voici mes conclusions:

Scénario n ° 1: coder le premier 'e' dans la chaîne de requête:

http://localhost/test?group=%65mployees

Résultat:
r-> uri:/test
r-> args: "groupe =                      % mployés »(observer les nombreux espaces)

Scénario n ° 2: coder la deuxième 'e':

http://localhost/test?group=employ%65es

Résultat:
r-> uri:/test
r-> args: "groupe = employer                     0.000000e-01S »

Scénario n ° 3: coder le dernier 'e':

http://localhost/test?group=employe%65s

Résultat: défaut seg

Quand je URL encoder n'importe quelle partie du chemin (pas la chaîne de requête) Apache se comporte:

Scénario n ° 4: encode 'e' dans le chemin au lieu de chaîne de requête:

http://localhost/t%65st

Résultat:
r-> uri:/test (attendu)
r- > args: NULL (attendu)

Pourquoi les arguments 'arg' et 'uri' traitent-ils différemment le codage url et comment puis-je obtenir la chaîne de requête canonicalisée dans mon module, comme je peux le faire avec 'request_rec-> uri' ?

Répondre

0

La raison pour laquelle je devenais étrange résulte dans mes journaux parce que je passais la chaîne de requête comme argument à printf et le symbole de pourcentage est un caractère spécial.

Je suis en train de reconstruire l'URL, en passant cela à la fonction ap_unescape_url pour décoder l'URL.

Maintenant que j'y pense, il est logique qu'Apache ne décode pas automatiquement le paramètre args car il s'agit essentiellement de la partie «données» de l'URL et non liée au chemin.