2012-07-03 16 views
9

Tengo un problema con urllib.url_encode en python. Las apuestas se explicaron con un código:Cómo escapar un símbolo de tubería (|) para url_encode en python

>>> from urllib import urlencode 
>>> params = {'p' : '1 2 3 4 5&6', 'l' : 'ab|cd|ef'} 
>>> urlencode(params) 
'p=1+2+3+4+5%266&l=ab%7Ccd%7Cef' 

Quiero mantener las tuberías ('|') en el parámetro l. ¿Puedes decirme cómo?

El resultado debe ser

'p=1+2+3+4+5%266&l=ab|cd|ef' 

PD: No quiero juntar la URL manualmente, pero el uso urlencode para eso.

Gracias -Pat

+0

Si necesita las tuberías de ahí, no se URLEncoding, así de simple. – Wrikken

+9

urlencode y luego reemplaza '% 7C' con' | ' – TheZ

+0

Entonces, ¿quieres básicamente codificar URL y luego revertir parte de la codificación? ¿Por qué codifica URL entonces? Me parece que las URL con símbolos de tubería pueden crear problemas. (http://stackoverflow.com/questions/11298404/the-connection-was-reset-asp-net) – chiccodoro

Respuesta

13

convertir un objeto de asignación de o una secuencia de tuplas de dos elementos a un “porcentaje-codificada” string [...]

El método urlencode() se actuando como se esperaba Si desea evitar la codificación, primero puede codificar el objeto completo y luego reemplazar los caracteres codificados con tuberías.

>>> u = urlencode(params) 
>>> u.replace('%7C', '|') 
'p=1+2+3+4+5%266&l=ab|cd|ef' 
+0

Pensé en reemplazar | con \ | o algo así antes de que urlencoding debería funcionar, pero tu solución también está bien. Gracias – wzr1337

+0

Agregar el carácter de escape estándar '\\' simplemente se convertiría a% 5C. La única forma de resolverlo sería reemplazarlo después de que haya sido codificado. – RobB

1

Es más simple en Python 3:

urllib.parse.urlencode(params, safe='|') 
Cuestiones relacionadas