转义和取消转换HTML

时间:2018-04-29 17:57:37

标签: coldfusion html-escape-characters coldfusion-2016 xml-encoding

在我无法控制的功能中,通过

返回数据
return xmlFormat(rc.content)

我后来想做一个

<cfoutput>#resultsofreturn#</cfoutput>

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

我考虑过了

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

但我不确定这些是彼此的反转

2 个答案:

答案 0 :(得分:4)

从CF 10开始,您应该使用较新的encodeFor函数。这些函数占用高位ASCII字符和UTF-8字符。

Old and Busted

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

新热度

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

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

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

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

答案 1 :(得分:4)

就像阿德里安所说,最好的选择是实现一个系统来获得预编码值。

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

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

TryCF.com example