]> granicus.if.org Git - python/commitdiff
Speed up the implementation of quote().
authorGuido van Rossum <guido@python.org>
Wed, 22 Jul 1998 21:33:23 +0000 (21:33 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 22 Jul 1998 21:33:23 +0000 (21:33 +0000)
Fix the implementation of quote_plus().  (It wouldn't treat '+' in the
original data right.)

Add urlencode(dict) which is handy to create the data for sending a
POST request with urlopen().

Lib/urllib.py

index d294c4ef61b4f77c2899ec59246f58691f1de8f4..2cb4deba89eb32ab2f87b2f8399c3873832db0bd 100644 (file)
@@ -881,22 +881,31 @@ def unquote_plus(s):
 always_safe = string.letters + string.digits + '_,.-'
 def quote(s, safe = '/'):
        safe = always_safe + safe
-       res = []
-       for c in s:
-               if c in safe:
-                       res.append(c)
-               else:
-                       res.append('%%%02x' % ord(c))
+       res = list(s)
+       for i in range(len(res)):
+               c = res[i]
+               if c not in safe:
+                       res[i] = '%%%02x' % ord(c)
        return string.joinfields(res, '')
 
 def quote_plus(s, safe = '/'):
        if ' ' in s:
                # replace ' ' with '+'
-               s = string.join(string.split(s, ' '), '+')
-               return quote(s, safe + '+')
+               l = string.split(s, ' ')
+               for i in range(len(l)):
+                       l[i] = quote(l[i], safe)
+               return string.join(l, '+')
        else:
                return quote(s, safe)
 
+def urlencode(dict):
+        l = []
+        for k, v in dict.items():
+                k = quote_plus(str(k))
+                v = quote_plus(str(v))
+                l.append(k + '=' + v)
+        return string.join(l, '&')
+
 
 # Proxy handling
 def getproxies():