Pregunta

Tengo una cadena como '' foo% 20bar '' y quiero '' foo bar '' fuera de el.

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

¿Alguien recuerda cómo se llama?

¿Fue útil?

Solución

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.

Otros consejos

url-unhex-string

En mi caso, necesitaba hacer esto de forma interactiva. Las respuestas anteriores me dieron las funciones correctas para llamar, luego fue solo una cuestión de envolverlo un poco para que fueran 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))

Agregue sal, quiero decir, vincular a las teclas según el gusto.

Emacs se envía con una biblioteca de URL , que proporciona un montón de funciones de análisis de URL & # 8212; como huaiyuan y Charlie Martin ya señaló. 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 es su propósito principal para analizar URL.

Creo que lo estás haciendo demasiado difícil: split-string probablemente hará lo que quieras. 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top