2013-01-09 47 views
2

假设我有一个html文件:如何在html中显示html?

<html>test<html> 

我想显示在浏览器的代码。然后我想创建这样的:

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

为了使格宾斯中间我有一个函数:

(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是否有内置的?我找不到它。

回答

3

有几个选项:

  1. 滚你自己。
  2. 使用commons StringEscapeUtils
  3. 如果您使用打嗝,它带有一个这样的功能。

对于#3,只需使用h功能hiccup.core

#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;"))) 

任何这些解决方案都很好。