29

我有一个像“foo%20bar”这样的字符串,我想要“foo bar”。

我知道必须有一个内置函数来解码 Emacs Lisp 中的 URL 编码字符串(查询字符串),但是对于我的生活,我今天找不到它,无论是在我的lisp/文件夹中还是在 Google 中。

这叫什么?

4

6 回答 6

49
url-unhex-string
于 2009-03-05T08:06:04.477 回答
26

就我而言,我需要以交互方式执行此操作。以前的答案给了我正确的调用函数,然后只需将其包装一点以使其具有交互性:

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

添加盐,我的意思是根据口味绑定到键。

于 2011-06-30T21:03:28.987 回答
11

Emacs 附带了一个URL 库,它提供了一系列 URL 解析功能——正如huaiyuanCharlie 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。

于 2009-04-28T12:08:46.173 回答
6

org-link-unescape在非常简单的情况下工作......w3m-url-decode-string更好,但它不是内置的,而且我在本地拥有的版本不适用于 Emacs 23。

于 2009-03-04T20:31:08.077 回答
0

我认为你让它有点太难了:split-string可能会做你想做的大部分事情。对于更高级的东西,请查看url-expand.el; 不幸的是,其中许多没有文档字符串,因此您可能必须阅读代码。

url-generic-parse-url看起来像一个潜在的赢家。

于 2009-03-04T18:44:16.243 回答
0

您可以urlencMELPA抓取并urlenc:decode-region用于一个区域或urlenc:decode-insert以交互方式插入您的文本。

于 2021-05-24T11:32:01.887 回答