URL-декодирование строки в Common Lisp

У меня есть строка, которая содержит экранированный 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" 

2 ответа

Решение

Быстрая сессия 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)

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

Нашел другое решение с 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 и awesone-cl).

Другие вопросы по тегам