2012-07-02 60 views
3

我有一个包含一个转义URL字符串:URL解码字符串

http%3A%2F%2Fexample.com%3Ffoo%3Dbar+baz 

我试图将其解码为以下:但是

http://example.com?foo=bar+baz 

,我可以没有找到Drakma出口的任何适合的功能。我可以连接代码如下所示:

* url-string 

"http://example.com?foo=bar+baz" 
* (drakma:url-encode url-string :utf-8) 

"http%3A%2F%2Fexample.com%3Ffoo%3Dbar%2Bbaz" 

...所以我想我是在正确的轨道上。如果任何人都可以向正确的方向提供帮助,我会很感激:-)我使用SBCL 1.0.54,它是从64位Linux Mint 13上的源代码构建而成的。

如果它有助于说明我是什么试图做,在Ruby中,我会做以下事情:

> uri_string = "http%3A%2F%2Fexample.com%3Ffoo%3Dbar+baz" 
=> "http%3A%2F%2Fexample.com%3Ffoo%3Dbar+baz" 
> URI.decode uri_string 
=> "http://example.com?foo=bar+baz" 
+0

如果您想知道,我知道这绝对是因为_entire_网址被转义了,包括协议规范。我正在为澳大利亚在线音乐商店编写一个跨平台的下载客户端,该商店提供的文件中包含上述示例中完全转义的URL列表。 –

+1

只是问明显:(apropos“DECODE”)不显示任何有趣的功能? (apropos“DECODE”“DRAKMA”)? –

回答

11

快速SLIME会话。

CL-USER> (ql-dist:system-apropos "url") 

#<SYSTEM curly/curly-20120407-git/quicklisp 2012-05-20> 
#<SYSTEM curly.test/curly-20120407-git/quicklisp 2012-05-20> 
#<SYSTEM do-urlencode/do-urlencode-20120407-git/quicklisp 2012-05-20> 
#<SYSTEM url-rewrite/url-rewrite-0.1.1/quicklisp 2012-05-20> 

CL-USER> (ql:quickload :do-urlencode) 

抄送pdo-urlencodeRET

DO-URLENCODE:URLDECODE 
    Function: (not documented) 
DO-URLENCODE:URLENCODE 
    Function: (not documented) 
DO-URLENCODE:URLENCODE-MALFORMED-STRING 
    Type: (not documented) 
DO-URLENCODE:URLENCODE-MALFORMED-STRING-STRING 
    Generic Function: (not documented) 

CL-USER> (do-urlencode:urldecode "http%3A%2F%2Fexample.com%3Ffoo%3Dbar%2Bbaz") 

"http://example.com?foo=bar+baz" 
+0

感谢:-)我仍然在学习'Lisp方式'的做法......它甚至从来没有想过有可能从REPL获得有关Quicklisp包的帮助。 –

0

实测另一种解决方案,具有Quri,一个URI处理与编码和解码实用程序(uri和参数)库:

(url-decode "http%3A%2F%2Fexample.com%3Ffoo%3Dbar%2Bbaz") 
;; "http://example.com?foo=bar+baz" 

(ql:quickload :quri)安装,然后选件(use-package :quri)

(我的来源:lisp-lang.org's recommend librariesawesone-cl)。