From a2494b1726345fde68cbb43c6f801b18bac18cb9 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 20 Oct 2004 13:13:33 +0000 Subject: [PATCH] . original commit: d34ff0a7930e4e32a623e326e79bec087e3db531 --- collects/net/uri-codec-sig.ss | 3 ++- collects/net/uri-codec-unit.ss | 25 +++++++++++++++++-------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/collects/net/uri-codec-sig.ss b/collects/net/uri-codec-sig.ss index 338ac93..f0aed95 100644 --- a/collects/net/uri-codec-sig.ss +++ b/collects/net/uri-codec-sig.ss @@ -8,4 +8,5 @@ form-urlencoded-encode form-urlencoded-decode alist->form-urlencoded - form-urlencoded->alist))) \ No newline at end of file + form-urlencoded->alist + current-alist-separator-mode))) \ No newline at end of file diff --git a/collects/net/uri-codec-unit.ss b/collects/net/uri-codec-unit.ss index 8a34785..1b6b6ef 100644 --- a/collects/net/uri-codec-unit.ss +++ b/collects/net/uri-codec-unit.ss @@ -208,8 +208,9 @@ ;; http://www.w3.org/TR/html401/appendix/notes.html#ampersands-in-uris ;; listof (cons symbol string) -> string (define alist->form-urlencoded - (opt-lambda (args [mode 'semi]) - (let* ([format-one + (opt-lambda (args) + (let* ([mode (current-alist-separator-mode)] + [format-one (lambda (arg) (let* ([name (car arg)] [value (cdr arg)]) @@ -222,20 +223,20 @@ [(null? args) null] [(null? (cdr args)) (list (format-one (car args)))] [else (list* (format-one (car args)) - (if (eq? mode 'semi) - ";" - "&") + (if (eq? mode 'amp) + "&" + ";") (loop (cdr args)))]))]) (apply string-append strs)))) ;; string -> listof (cons string string) ;; http://www.w3.org/TR/html401/appendix/notes.html#ampersands-in-uris (define form-urlencoded->alist - (opt-lambda (str [mode 'both]) + (opt-lambda (str) (define key-regexp (regexp "[^=]*")) - (define value-regexp (case mode + (define value-regexp (case (current-alist-separator-mode) [(semi) (regexp "[^;]*")] - [(ampm) (regexp "[^&]*")] + [(amp) (regexp "[^&]*")] [else (regexp "[^&;]*")])) (define (next-key str start) (if (>= start (string-length str)) @@ -275,6 +276,14 @@ (loop next-start end (lambda (x) (make-alist (cons pair x))))] [#f (make-alist '())])])))) + (define current-alist-separator-mode + (make-parameter 'amp-or-semi (lambda (s) + (unless (memq s '(amp semi amp-or-semi)) + (raise-type-error 'current-alist-separator-mode + "'amp, 'semi, or 'amp-or-semi" + s)) + s))) + )) )