L'analyse de la chaîne de requête est un peu plus compliquée qu'il n'y paraît, selon la façon dont vous pardonnez.
Tout d'abord, la chaîne de requête est en octets ascii. Vous lisez ces octets un par un et les convertissez en caractères. Si le personnage est? ou & puis il signale le début d'un nom de paramètre. Si le caractère est = alors il signale le début d'une valeur de paramètre. Si le caractère est%, il signale le début d'un octet codé. Voici où cela devient délicat.
Lorsque vous lisez dans un% char, vous devez lire les deux octets suivants et les interpréter comme des chiffres hexadécimaux. Cela signifie que les deux octets suivants seront 0-9, af ou AF. Collez ces deux chiffres hexadécimaux ensemble pour obtenir votre valeur d'octet. Mais rappelez-vous, les octets ne sont pas des caractères . Vous devez savoir quel encodage a été utilisé pour encoder les caractères. Le caractère é n'encode pas la même chose en UTF-8 qu'en ISO-8859-1. En général, il est impossible de savoir quel encodage a été utilisé pour un jeu de caractères donné. J'utilise toujours UTF-8 parce que mon site Web est configuré pour toujours servir tout en utilisant UTF-8 mais en pratique, vous ne pouvez pas en être certain. Certains user-agents vous indiqueront l'encodage des caractères dans la requête; vous pouvez essayer de lire cela si vous avez une demande HTTP complète. Si vous avez juste une URL isolée, bonne chance.
Quoi qu'il en soit, en supposant que vous utilisez UTF-8 ou un autre codage de caractères multi-octets, maintenant que vous avez décodé un octet codé, vous devez le mettre de côté jusqu'à ce que vous capturiez l'octet suivant. Vous avez besoin de tous les octets codés qui sont ensemble, car vous ne pouvez pas décoder correctement l'url un octet à la fois. Mettez de côté tous les octets qui sont ensemble puis décodez-les tous à la fois pour reconstruire votre personnage.
De plus, cela devient plus amusant si vous voulez être indulgent et tenir compte des agents utilisateurs qui gèrent les URL. Par exemple, certains clients de messagerie Web codent deux fois des éléments. Ou doublez les caractères? & = (Par exemple:) http://yoursite.com/blah??p1==v1&&p2==v2
. Si vous voulez essayer de gérer cela avec élégance, vous devrez ajouter plus de logique à votre analyseur.
getQuery()
et ce que vous souhaitez obtenir en sortie?