Update: Ich wusste, dass es mehr als das sein ...
ring.util.codec
von ring-core
hat eine Funktion aufgerufen, die wie so funktionieren:
user> (require '[ring.util.codec :as c])
nil
user> (c/url-encode "<a>")
"%3Ca%3E"
user> (c/url-decode "<a>")
"<a>"
Dies sind Wrapper um java.net.URLEncoder
und java.net.URLDecoder
. Derselbe Namespace bietet Funktionen für den Umgang mit der Base64-Codierung basierend auf einer Klasse von Apache Commons.
Ursprüngliche Antwort folgt.
Ich bin nicht sicher, ob es eine öffentliche Funktion, dies zu tun ist, aber Enlive
verfügt über zwei private Funktionen xml-str
und attr-str
genannt, die dies tun: (. attr-str
auch entkommt "
)
(defn- xml-str
"Like clojure.core/str but escapes < > and &."
[x]
(-> x str (.replace "&" "&") (.replace "<" "<") (.replace ">" ">")))
Sie könnten bei dieser Funktion mit @#'net.cgrand.enlive-html/xml-str
bekommen (Clojure neigt nicht dazu, Sachen wirklich privat zu machen) oder kopieren Sie es einfach in Ihren eigenen Namespace.
Das ist ein bisschen schade. Klingt wie ein großes Versehen in den meisten Clojure Web-Frameworks. –
Anscheinend ist die Situation nicht ganz so schlimm: siehe die aktualisierte Antwort.:-) –
Sieht so aus, als wäre ich ein wenig eilig, um Enlive die Schuld zu geben, aber danke trotzdem. :) –