如何“ URL解码” Emacs Lisp中的一个字符串?
题
我有一个像“foo%20bar”这样的字符串。我想要“foo bar”出来的。
我知道必须有一个内置函数来解码Emacs Lisp中的URL编码字符串(查询字符串),但对于我的生活,我今天找不到它,无论是在我的lisp /文件夹中还是与谷歌。
有人记得它的名字吗?
解决方案
org-link-unescape
可以完成非常简单的工作...... w3m-url-decode-string
更好,但它不是内置的我在本地的版本不适用于Emacs 23。
其他提示
url-unhex-string
在我的情况下,我需要以交互方式进行此操作。以前的答案给了我正确的调用功能,然后只需要将它包装一点就可以使它们互动:
(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))
添加盐,我的意思是根据口味绑定到钥匙。
Emacs附带网址库,提供了大量网址解析功能&# 8212;作为 huaiyuan 和查理马丁已经指出。这是一个小例子,它可以让你知道如何使用它:
(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的主要目的。
我认为你有点太难了: split-string
可能会完成你想要的大部分工作。对于更高级的东西,看看 url-expand.el
;中的函数;不幸的是,他们中的许多人没有文档字符串,所以你可能不得不阅读代码。
url-generic-parse-url
看起来像是潜在的赢家。
不隶属于 StackOverflow