Domanda

Ho una stringa come " foo% 20bar " e desidero " foo bar " fuori di esso.

So che deve esserci una funzione integrata per decodificare una stringa con codifica URL (stringa di query) in Emacs Lisp, ma per la vita di me non la trovo oggi, né nella mia cartella lisp / o con google.

Qualcuno ricorda come si chiama?

È stato utile?

Soluzione

org-link-unescape fa il lavoro per casi molto semplici ... w3m-url-decode-string è migliore, ma non è integrato e la versione che ho localmente non funziona con Emacs 23.

Altri suggerimenti

url-unhex-string

Nel mio caso avevo bisogno di farlo in modo interattivo. Le risposte precedenti mi davano le giuste funzioni da chiamare, quindi era solo questione di racchiuderle un po 'per renderle interattive:

(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))

Aggiungi sale, intendo legare i tasti secondo i gusti.

Emacs viene spedito con una libreria URL , che fornisce un sacco di funzioni di analisi URL— come huaiyuan e Charlie Martin già indicato. Ecco un piccolo esempio che ti darebbe un'idea di come 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"))

Penso che sia meglio fare affidamento su di esso rispetto a org-mode in quanto è il suo scopo principale per analizzare l'URL.

Penso che tu lo stia rendendo un po 'troppo difficile: split-string probabilmente farà la maggior parte di ciò che vuoi. Per cose più fantasiose, dai un'occhiata alle funzioni in url-expand.el ; sfortunatamente, molti di loro non hanno stringhe di documenti, quindi potresti dover leggere il codice.

url-generic-parse-url sembra un potenziale vincitore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top