转义和取消转义 HTML

Escaping and unescaping HTML

在我无法控制的函数中,数据通过

返回
return xmlFormat(rc.content)

我以后想做一个

<cfoutput>#resultsofreturn#</cfoutput>

问题是所有 HTML 标签都被转义了。

我考虑过

<cfoutput>#DecodeForHTML(resultsofreturn)#</cfoutput>

但我不确定它们是否互为反义词

从 CF 10 开始,您应该使用较新的 encodeFor 函数。这些函数解释了高 ASCII 字符以及 UTF-8 字符。

又老又破

  • XmlFormat()
  • HTMLEditFormat()
  • JSStringFormat()

新热点

  • encodeForXML()
  • encodeForXMLAttribute()
  • encodeForHTML()
  • encodeForHTMLAttribute()
  • encodeForJavaScript()
  • encodeForCSS()

这些函数的输出因上下文而异。

然后,如果您只是被转义 HTML,您可以使用 Jsouo 或 Jakarta Commons Lang 库将其转换回来。有some examples in a related SO answer.

显然,最好的解决方案是将现有功能更新为 return 任一版本的内容。有没有办法复制该函数以便 return 未转义的内容?或者您可以从使用 Java 解决方案转换 HTML 的新函数中调用它吗?

正如 Adrian 总结的那样,最好的选择是实施一个系统来获得预编码值。

在当前状态下,您使用的字符串已针对 xml 文档进行编码。一种选择是使用文本创建一个 xml 文档,然后从 xml 文档中解析出文本。我不确定这种方法的效率如何,但它会 return 文本返回到它的预编码值。

function xmlDecode(text){
    return xmlParse("<t>#text#</t>").t.xmlText;
}

TryCF.com example