; ,open srfi-13 srfi-14 ascii (define (replace-plus-signs uri-string) (string-map (lambda (c) (if (char=? c #\+) #\space c)) uri-string)) (define (decode-hex-chars uri-string) (call-with-current-continuation (lambda (esc) (regexp-substitute/global #f (rx (: #\% (= 2 any))) uri-string 'pre (lambda (match) (cond ((regexp-search (rx (: #\% (= 2 hex-digit))) (match:substring match 0)) => (lambda (match) (string (hex->char (substring (match:substring match 0) 1 3))))) (else (esc #f)))) 'post)))) (define (hex->char str) (ascii->char (string->number (string-append "#x" str)))) (define (decode-query query-string) (map (lambda (argval) (string-tokenize argval (char-set-difference char-set:full (char-set #\=)))) (string-tokenize query-string (char-set-difference char-set:full (char-set #\&)))))