Arc Cross Reference

urldecode

[procedure] urldecode s

(def urldecode (s)
  (tostring
    (forlen i s
      (caselet c (s i)
        #\+ (writec #\space)
        #\% (do (when (> (- (len s) i) 2)
                  (let code  (coerce (subseq s (+ i 1) (+ i 3))
                                     'int 16)
                    (if (> code 126)
                        (pr (latin1-hack code))
                        (writec (coerce code 'char)))))
                (++ i 2))
            (writec c)))))