Aktualizacja: Wiedziałem, że musi być więcej niż ...
ring.util.codec
z ring-core
posiada funkcje zwane które działają tak:
user> (require '[ring.util.codec :as c])
nil
user> (c/url-encode "<a>")
"%3Ca%3E"
user> (c/url-decode "<a>")
"<a>"
Są obwolut wokół java.net.URLEncoder
i java.net.URLDecoder
. Ta sama przestrzeń nazw zapewnia funkcje radzenia sobie z kodowaniem Base64, oparte na klasie Apache Commons.
Oryginalna odpowiedź jest następująca.
Nie jestem pewien, czy jest to funkcja publiczna to zrobić, ale Enlive
ma dwa prywatne funkcje zwane xml-str
i attr-str
który to zrobić: (. attr-str
ucieka również "
)
(defn- xml-str
"Like clojure.core/str but escapes < > and &."
[x]
(-> x str (.replace "&" "&") (.replace "<" "<") (.replace ">" ">")))
Możesz dostać się do tej funkcji z @#'net.cgrand.enlive-html/xml-str
(Clojure nie ma tendencji do robienia rzeczy naprawdę prywatnych ...) lub po prostu skopiować go do własnej przestrzeni nazw.
To trochę niesmak. Brzmi to jak poważny niedopatrzenie w większości frameworków Clojure. –
Wygląda na to, że sytuacja nie jest taka zła: zobacz zaktualizowaną odpowiedź.:-) –
Wygląda na to, że trochę pośpiesznie obwiniałem Enlive'a, ale dzięki. :) –