我有一个字符串,如“foo%20bar”,我想从中得到“foo bar”。
我知道Emacs Lisp中必须有一个内置函数来解码URL编码的字符串(查询字符串),但我却找不到它了,无论是在我的文件夹中还是通过谷歌搜索。
这个函数叫什么名字?
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自带URL库,提供了一系列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是它的主要目的。
org-link-unescape
只能处理非常简单的情况 ... w3m-url-decode-string
更好,但它不是内置的,并且我本地的版本与 Emacs 23 不兼容。
url-unhex-string
可以实现你想要的功能。 - Cheesosplit-string
可能已经满足了你大部分的需求。如果需要更高级的功能,可以看一下 url-expand.el
中的函数;不幸的是,其中许多函数没有文档字符串,所以你可能需要阅读代码。
url-generic-parse-url
看起来是一个潜在的赢家。