【问题标题】:How can I "URL decode" a string in Emacs Lisp?如何在 Emacs Lisp 中“URL 解码”字符串?
【发布时间】:2009-03-04 18:24:40
【问题描述】:

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

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

叫什么?

【问题讨论】:

    标签: url emacs elisp urlencode urldecode


    【解决方案1】:
    url-unhex-string
    

    【讨论】:

    • 我的 url-unhex-string 与 Emacs 25 不匹配:/
    • 你可能需要(需要'url-util)——在实践中,这通常会通过其他一些代码加载来完成,但依赖它肯定不好。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      Emacs 附带了一个 URL library,它提供了一系列 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 的主要目的。

      【讨论】:

      • 喜欢这个例子!
      【解决方案4】:

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

      【讨论】:

      • 现在已经足够了。奇怪的是,它只使用了一个包含 17 个字符的常量列表。也许我会在某个时候解决这个问题。
      • url-unhex-string 做你想做的事。
      【解决方案5】:

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

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

      【讨论】:

      • 嗯,也许我说错了。我有一个像“foo%20bar”这样的字符串,我想要“foo bar”。我看不出 split-string 或 url-generic-parse-url 或 url-expand.el 中的任何内容在这里有什么帮助。
      【解决方案6】:

      您可以从MELPA 中获取urlenc 并使用urlenc:decode-region 表示区域或使用urlenc:decode-insert 以交互方式插入您的文本。

      【讨论】:

        猜你喜欢
        • 2012-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-09
        • 1970-01-01
        相关资源
        最近更新 更多