Regardons les deux URL suivantes, remplissent-elles les mêmes paramètres ? aaa.aspx ?tag=.net %BC %BC %CA %F5 aaa.aspx ?tag=.net %e6%8a %80 %e6%9c %af
Cela semble différent, mais en réalité, ils utilisent tous UrlEncode pour la « technologie .net », l’un est l’encodage GB2312 et l’autre l’encodage Utf-8. Le code suivant peut obtenir l’effet d’encodage ci-dessus :
chaîne tmp1 = System.Web.HttpUtility.UrlEncode(« .net technology », System.Text.Encoding.GetEncoding(« GB2312 »)) ; chaîne tmp2 = System.Web.HttpUtility.UrlEncode (« .net technology », System.Text.Encoding.UTF8) ;
Nos pages web réelles peuvent être consultées par d’autres programmes. Par exemple, une page ASP simplifiée en chinois sur le système d’exploitation doit transmettre un paramètre chinois à une page ASP.net. Par défaut, sur les systèmes d’exploitation simplifiés chinois, la méthode Server.UrlEncode d’ASP encodera le chinois avec un codage GB2312. Mais par défaut, ASP.net pages sont encodées en UTF-8. Dans ce cas, lorsque vous utilisez Request.QueryString[« Tag »] pour accepter la valeur, vous ne pourrez pas accepter les informations chinoises, et vous verrez des caractères brouillés dans le débogage étape par étape. À ce stade, bien que Request.QueryString["Tag"] soit accepté avec des caractères brouillés, l’URL n’est pas brouillée pour l’instant.
La solution est d’analyser vous-même les paramètres de l’URL, puis de déchiffrer les valeurs des paramètres selon l’encodage de GB2312, au lieu d’utiliser l’encodage UTF-8 par défaut de .net. En fait, Microsoft fournit également des fonctions correspondantes, donc nous n’avons pas à utiliser des expressions régulières pour analyser nous-mêmes les chaînes d’URL.
Le code de démo est le suivant :
chaîne q = requête.URL.requête ;
System.Collections.Spécialisée.CollectionValueCollection nv = System.Web.HttpUtility.ParseQueryString(q, System.Text.Encoding.GetEncoding(« GB2312 »)) ; Response.Write(nv["Tag"]) ;
Utilisons le réflecteur .NET de Lutz Roeder pour examiner l’implémentation de la méthode System.Web.HttpUtility.ParseQueryString : Si nous continuons à vérifier, nous pouvons voir que le code qui gère finalement l’analyse des chaînes de paramètres URL est le suivant :
La fonction suivante de la classe System.Web.HttpValueCollection implémente l’analyse syntaxique du paramètre URL Ici, on voit qu’il s’agit d’une analyse réalisée par chaque personnage.
Quant au type de méthode d’encodage que l’autre partie nous transmet, il est préférable de la passer comme paramètre, afin de pouvoir la déchiffrer selon ce paramètre de l’utilisateur. |