Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何";URL解码";Emacs Lisp中的字符串?_Url_Emacs_Elisp_Urlencode_Urldecode - Fatal编程技术网

如何";URL解码";Emacs Lisp中的字符串?

如何";URL解码";Emacs Lisp中的字符串?,url,emacs,elisp,urlencode,urldecode,Url,Emacs,Elisp,Urlencode,Urldecode,我有一个类似“foo%20bar”的字符串,我想从中去掉“foo-bar” 我知道在Emacs Lisp中必须有一个内置函数来解码URL编码的字符串(查询字符串),但就我的一生而言,无论是在我的Lisp/文件夹中还是在google中,我今天都找不到它 有人记得它叫什么吗?我想你把它弄得有点太难了:分割字符串可能会做你想做的大部分事情。对于更有趣的东西,请查看url expand.el中的函数;不幸的是,其中许多没有文档字符串,所以您可能需要阅读代码 url-generic-parse-url看起

我有一个类似“foo%20bar”的字符串,我想从中去掉“foo-bar”

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


有人记得它叫什么吗?

我想你把它弄得有点太难了:
分割字符串
可能会做你想做的大部分事情。对于更有趣的东西,请查看
url expand.el
中的函数;不幸的是,其中许多没有文档字符串,所以您可能需要阅读代码


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

org-link-unescape
在非常简单的情况下完成这项工作
w3m url解码字符串更好,但它不是内置的,而且我在本地使用的版本不适用于Emacs 23。

Emacs附带了,它提供了一系列url解析功能,正如前面所指出的。下面是一个小示例,可以让您了解如何使用它:

url-unhex-string
(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"))

我认为依赖它比依赖组织模式更好,因为它的主要目的是解析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))

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

你可以从MELPA中抓取
urlenc
,并使用
urlenc:decode region
来表示区域,或者
urlenc:decode insert
以交互方式插入你的文本

嗯,可能我说错了。我有一个类似“foo%20bar”的字符串,我想从中去掉“foo-bar”。我看不出拆分字符串或url通用解析url或url-expand.el中的任何内容在这里有什么帮助。现在已经足够了。但奇怪的是,它只使用17个字符的常量列表。也许我会在某个时候解决这个问题。
url unhex string
可以满足您的需要。喜欢这个例子!我有一个url unhex字符串与Emacs 25不匹配:/You可能需要(require'url util)--在实践中,这通常会通过一些其他代码加载来完成,但依赖于它肯定不好。