2

假设我有一个 html 文档:

<html>test<html>

我想在浏览器中显示该代码。然后我会创建类似的东西:

<html><body>
<pre>&lt;html&gt;test&lt;html&gt;</pre>
</body></html>

为了制作中间的gubbins,我有一个功能:

(defn html-escape [string] 
  (str "<pre>" (clojure.string/escape string {\< "&lt;", \> "&gt;"}) "</pre>"))

它为我做了上述转换:

user> (html-escape "<html>test<html>")
"<pre>&lt;html&gt;test&lt;html&gt;</pre>"

我的问题是:这是否足够好,还是我会遇到 html 会使转换中断?

第二个问题可能是:clojure 是否内置了这个?我找不到它。

4

1 回答 1

3

有几个选项:

  1. 自己滚。
  2. 使用公共 StringEscapeUtils
  3. 如果您正在使用打嗝,它带有一个功能。

对于#3,只需使用hiccup.coreh中的函数。

对于#2,添加[org.apache.commons/commons-lang3 "3.1"]到您的依赖项,然后您可以使用

(org.apache.commons.lang3.StringEscapeUtils/escapeHtml4 "your string")

对于#1,您可以使用打嗝使用的功能。它非常小:

(defn escape-html
  "Change special characters into HTML character entities."
  [text]
  (.. ^String (as-str text)
    (replace "&"  "&amp;")
    (replace "<"  "&lt;")
    (replace ">"  "&gt;")
    (replace "\"" "&quot;")))

这些解决方案中的任何一个都可以。

于 2013-01-09T11:15:37.883 回答