如何在Emacs Lisp中“URL解码”一个字符串?
我有一个像“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