]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix encoding in browse-url-encode-url
authorLars Ingebrigtsen <larsi@gnus.org>
Tue, 7 Sep 2021 15:41:31 +0000 (17:41 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Tue, 7 Sep 2021 15:46:55 +0000 (17:46 +0200)
* lisp/net/browse-url.el (browse-url-url-encode-chars): Document
what the argument really is, and simplify the implementation
(bug#50435).
(browse-url-encode-url): Encode spaces.

lisp/net/browse-url.el
test/lisp/net/browse-url-tests.el

index 73b8c439f2818358607d6a3eaecb642a51acad7b..b8e1f1bf126b5a102632a1c05da13772ffd4d711 100644 (file)
@@ -692,16 +692,11 @@ alist is deprecated.  Use `browse-url-handlers' instead.")
 
 (defun browse-url-url-encode-chars (text chars)
   "URL-encode the chars in TEXT that match CHARS.
-CHARS is a regexp-like character alternative (e.g., \"[)$]\")."
-  (let ((encoded-text (copy-sequence text))
-       (s 0))
-    (while (setq s (string-match chars encoded-text s))
-      (setq encoded-text
-           (replace-match (format "%%%X"
-                                  (string-to-char (match-string 0 encoded-text)))
-                          t t encoded-text)
-           s (1+ s)))
-    encoded-text))
+CHARS is a regexp that matches a character."
+  (replace-regexp-in-string chars
+                            (lambda (s)
+                              (format "%%%X" (string-to-char s)))
+                            text))
 
 (defun browse-url-encode-url (url)
   "Escape annoying characters in URL.
@@ -710,7 +705,7 @@ regarding its parameter treatment."
   ;; FIXME: Is there an actual example of a web browser getting
   ;; confused?  (This used to encode commas, but at least Firefox
   ;; handles commas correctly and doesn't accept encoded commas.)
-  (browse-url-url-encode-chars url "[\")$] "))
+  (browse-url-url-encode-chars url "[\"()$ ]"))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; URL input
index 898bef8513bddd1e60a9b7ba8660fbec7d10fc4e..4264e03d9124402c0a812eff0ef9747243b0c605 100644 (file)
 
 (ert-deftest browse-url-tests-encode-url ()
   (should (equal (browse-url-encode-url "") ""))
-  (should (equal (browse-url-encode-url "a b c") "a b c"))
+  (should (equal (browse-url-encode-url "a b c") "a%20b%20c"))
   (should (equal (browse-url-encode-url "\"a\" \"b\"")
-                 "\"a%22\"b\""))
-  (should (equal (browse-url-encode-url "(a) (b)") "(a%29(b)"))
-  (should (equal (browse-url-encode-url "a$ b$") "a%24b$")))
+                 "%22a%22%20%22b%22"))
+  (should (equal (browse-url-encode-url "(a) (b)") "%28a%29%20%28b%29"))
+  (should (equal (browse-url-encode-url "a$ b$") "a%24%20b%24")))
 
 (ert-deftest browse-url-tests-url-at-point ()
   (with-temp-buffer