我有一個像「foo%20bar」的字符串,我想要「foo bar」出來。如何在Emacs Lisp中「URL解碼」一個字符串?
我知道必須有一個內置函數來解碼Emacs Lisp中的URL編碼字符串(查詢字符串),但對於我而言,我今天無法在我的lisp /文件夾中找到它或與谷歌。
有人記得它叫什麼嗎?
我有一個像「foo%20bar」的字符串,我想要「foo bar」出來。如何在Emacs Lisp中「URL解碼」一個字符串?
我知道必須有一個內置函數來解碼Emacs Lisp中的URL編碼字符串(查詢字符串),但對於我而言,我今天無法在我的lisp /文件夾中找到它或與谷歌。
有人記得它叫什麼嗎?
org-link-unescape
做這項工作最簡單的情況...... w3m-url-decode-string
是更好的,但它不是建立在和我的版本本地不使用Emacs工作23
我覺得你讓它有點太難:split-string
可能會做你想要的大部分。對於愛好者來說,看看url-expand.el
中的功能;不幸的是,其中許多人沒有文檔字符串,所以你可能需要閱讀代碼。
url-generic-parse-url
看起來像一個潛在的贏家。
嗯,也許我錯過了。我有一個像「foo%20bar」的字符串,我想要「foo bar」。我沒有看到split-string或url-generic-parse-url或url-expand.el中的任何內容在這裏確實有幫助。 – Ken 2009-03-04 19:07:38
url-unhex-string
Emacs的發貨與URL library,提供了一堆URL解析函數 - 如huaiyuan和Charlie Martin已經指出。這裏是想給你一個想法如何使用它的一個小例子:
(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"))
我認爲是更好地依靠它比org-mode
因爲它是其解析URL的主要目的。
在我的情況下,我需要交互地做到這一點。以前的答案給了我正確的函數調用,那麼它只是一個包裝了一點,使他們互動的事情:
(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))
加入鹽,我的意思是根據口味結合鍵。
現在已經夠好了。但奇怪的是,它只使用17個字符的恆定列表。也許我會在某個時候解決這個問題。 – Ken 2009-03-04 21:07:21
`url-unhex-string`做你想做的。 – Cheeso 2011-05-12 12:22:50