Maison  >  Article  >  développement back-end  >  Comment encoder correctement les paramètres d'URL en Python ?

Comment encoder correctement les paramètres d'URL en Python ?

DDD
DDDoriginal
2024-10-27 07:00:03954parcourir

How to Properly Encode URL Parameters in Python?

Encodage des paramètres d'URL en Python

Les URL contiennent souvent des paramètres qui doivent être codés pour éviter les erreurs et maintenir la compatibilité. En Python, la fonction urllib.quote() est couramment utilisée à cet effet. Cependant, il présente certaines limites :

  • Encodage incomplet : urllib.quote() ne parvient pas à encoder le caractère "/", ce qui peut interrompre la normalisation OAuth.
  • Problèmes de prise en charge d'Unicode : Il génère des exceptions lorsque vous essayez de gérer des chaînes Unicode.

Encodage amélioré avec urllib.parse.quote()

La documentation Python 3 suggère d'utiliser urllib.parse.quote() :

<code class="python">urllib.parse.quote(string, safe='/', encoding=None, errors=None)</code>

Cette fonction offre un meilleur encodage en permettant à la spécification de caractères supplémentaires de rester sans guillemets. Par défaut, le paramètre safe inclut "/". Passer une chaîne vide pour sécuriser résout le premier problème :

<code class="python">>>> import urllib.parse
>>> urllib.parse.quote('/test', safe='')
'%2Ftest'</code>

Gestion d'Unicode

Le deuxième problème avec la prise en charge d'Unicode a été résolu dans Python 3. Pour Python 2 , vous pouvez encoder des chaînes Unicode au format UTF-8 pour contourner le problème :

<code class="python">>>> query = urllib.quote(u"Müller".encode('utf8'))
>>> print urllib.unquote(query).decode('utf8')
Müller</code>

Approche alternative : urlencode()

Pour plus de commodité, envisagez d'utiliser urlencode( ) au lieu de coder manuellement chaque paramètre en pourcentage. Il encode automatiquement les paires clé-valeur, avec prise en charge d'Unicode et des délimiteurs personnalisés :

<code class="python">>>> import urllib.parse
>>> params = urllib.parse.urlencode({'name': 'John Doe'})
'name=John+Doe'</code>

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