如何在html中显示html?

时间:2013-01-09 11:00:59

标签: html clojure escaping

假设我有一个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内置了吗?我找不到了。

1 个答案:

答案 0 :(得分:3)

有几个选择:

  1. 自己动手。
  2. 使用commons StringEscapeUtils
  3. 如果您正在使用打嗝,它会附带一个功能。
  4. 对于#3,只需使用hiccup.core中的h功能。

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

    进行编码
    (org.apache.commons.lang3.StringEscapeUtils/escapeHtml4 "your string")
    

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

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

    任何这些解决方案都可以。