url emacs elisp urlencode urldecode

¿Cómo “decodificar URL” una cadena en Emacs Lisp?



elisp urlencode (5)

Creo que lo estás haciendo un poco demasiado difícil: split-string probablemente hará la mayor parte de lo que quieres. Para cosas más sofisticadas, eche un vistazo a las funciones en url-expand.el ; desafortunadamente, muchos de ellos no tienen cadenas de documentos, por lo que es posible que tenga que leer el código.

url-generic-parse-url parece un posible ganador.

Tengo una cadena como "foo% 20bar" y quiero "foo bar" fuera de ella.

Sé que tiene que haber una función incorporada para decodificar una cadena codificada en URL (cadena de consulta) en Emacs Lisp, pero por mi vida no puedo encontrarla hoy, ni en mi carpeta lisp / ni en google.

¿Alguien recuerda como se llama?


Emacs se entrega con una biblioteca de URL , que proporciona un montón de funciones de análisis de URL, como huaiyuan y Charlie Martin ya señalaron. Aquí hay un pequeño ejemplo que le daría una idea de cómo usarlo:

(let ((url "http://www.google.hu/search?q=elisp+decode+url&btnG=Google+keres%E9s&meta=")) ;; Return list of arguments and values (url-parse-query-string ;; Decode hexas (url-unhex-string ;; Retrieve argument list (url-filename ;; Parse URL, return a struct (url-generic-parse-url url))))) => (("meta" "") ("btnG" "Google+keresés") ("/search?q" "elisp+decode+url"))

Creo que es mejor confiar en él que org-mode ya que su principal propósito es analizar la URL.


En mi caso necesitaba hacer esto interactivamente. Las respuestas anteriores me dieron las funciones correctas para llamar, entonces solo fue cuestión de envolverlas un poco para hacerlas interactivas:

(defun func-region (start end func) "run a function over the region between START and END in current buffer." (save-excursion (let ((text (delete-and-extract-region start end))) (insert (funcall func text))))) (defun hex-region (start end) "urlencode the region between START and END in current buffer." (interactive "r") (func-region start end #''url-hexify-string)) (defun unhex-region (start end) "de-urlencode the region between START and END in current buffer." (interactive "r") (func-region start end #''url-unhex-string))

Añadir sal, me refiero a unir a las teclas según el gusto.


org-link-unescape hace el trabajo para casos muy simples ... w3m-url-decode-string es mejor, pero no está integrado y la versión que tengo localmente no funciona con Emacs 23.


url-unhex-string