【问题标题】:URL-decode a string in Common Lisp在 Common Lisp 中对字符串进行 URL 解码
【发布时间】:2012-07-02 19:56:54
【问题描述】:

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

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

我正在尝试将其解码为以下内容:

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

但是,我找不到 Drakma 导出的任何合适的函数。我可以en这样编码:

* 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" 

【问题讨论】:

  • 如果您想知道,我知道 整个 URL 被转义是非常奇怪的,包括协议规范。我正在尝试为澳大利亚在线音乐商店编写一个跨平台下载客户端,该客户端提供包含完全转义 URL 列表的文件,如上面的示例。
  • 只是问显而易见的:(apropos "DECODE")没有显示任何有趣的功能? (适合“解码”“德拉克玛”)?

标签: url common-lisp drakma


【解决方案1】:

快速的 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)

C-cC-dpdo-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"

【讨论】:

  • 谢谢 :-) 我仍在学习“Lisp 方式”做事......我什至从未想过可能有一种方法可以从 REPL 获得有关 Quicklisp 包的帮助。
【解决方案2】:

找到另一个解决方案,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)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多