Maison  >  Article  >  développement back-end  >  Comment encoder correctement les paramètres d'URL en Python : résoudre les limitations de `urllib.quote()` et `urllib.urlencode()`

Comment encoder correctement les paramètres d'URL en Python : résoudre les limitations de `urllib.quote()` et `urllib.urlencode()`

Barbara Streisand
Barbara Streisandoriginal
2024-10-26 03:28:03191parcourir

How to Properly Encode URL Parameters in Python:  Addressing Limitations of `urllib.quote()` and `urllib.urlencode()`

Encoder les paramètres d'URL avec un codage en pourcentage en Python

Lors du codage en pourcentage des paramètres d'URL pour éviter les erreurs et garantir une normalisation appropriée, le dans urllib.quote(), la fonction peut échouer.

Omission d'encodage par défaut :

Utiliser urllib.quote() comme suit :

url = "http://example.com?p=" + urllib.quote(query)

Omet l'encodage des caractères cruciaux comme / vers /, ce qui entraîne des problèmes avec la normalisation OAuth.

Déficience de la prise en charge d'Unicode :

De plus, il ne parvient pas à gérer les chaînes Unicode, ce qui entraîne exceptions lors de la tentative d'encodage de caractères non-ASCII.

Encodage amélioré avec urllib.parse.quote() et paramètre sécurisé :

Pour remédier à ces limitations, utilisez urllib. parse.quote() de Python 3, qui fournit une solution :

urllib.parse.quote(string, safe='/', encoding=None, errors=None)

Le paramètre safe est par défaut '/', mais la spécification d'une chaîne vide désactive les exclusions de caractères ASCII supplémentaires, garantissant ainsi un encodage correct de / :

urllib.parse.quote('/test', safe='') # Encodes '/' to '%2F'

Correction de la gestion Unicode dans Python 2 :

Dans Python 2, il y avait un bug de gestion Unicode avec urllib.quote(). Pour contourner ce problème, encodez manuellement la chaîne au format UTF-8 avant d'appliquer le codage en pourcentage :

query = urllib.quote(u"Müller".encode('utf8'))
print urllib.unquote(query).decode('utf8') # Outputs: Müller

Alternative : urllib.urlencode()

Pour un approche plus simple, envisagez d'utiliser urllib.urlencode(), qui gère automatiquement à la fois le codage en pourcentage et Unicode :

encoded_params = urllib.urlencode({'p': query}) # Properly encodes '/' and supports Unicode

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn