我有一个ColdFusion表单并通过使用下面的Javascript从另一个表单复制它来设置字段值。 (这实际上来自弹出输入窗口,您可以在其中粘贴大文本)。
form1.remark.value = form2.remark.value;
发生这种情况后,将提交form1以供另一个process.cfm
页面进一步处理。
问题是remark.value
包含复杂文本,包括XML,但是当它到达process.cfm
页面时会被编码。我正在寻找一种在Javascript部分正确编码的方法,然后使用ColdFusion代码在process.cfm
对其进行解码,以便我返回原始文本,包括XML标记。
这是如何最好地完成的?
答案 0 :(得分:1)
我认为你可以像这样使用StringEscapeUtils
类java:
<cfset objEscapeUtil = createObject("java", "org.apache.commons.lang.StringEscapeUtils")>
<cfset unescapedString = objEscapeUtil.unescapeJavaScript(escapedString)>
答案 1 :(得分:1)
如果您尝试在下一页上使用提交的表单字段的值作为JavaScript变量的值,那么您需要使用内置的(从ColdFusion 10开始)函数encodeForJavaScript。
<cfoutput>var myJSvar = '#encodeForJavaScript(form.myField)#';</cfoutput>
这将正确地转义form.myField
的字符串值,以便它可以与JavaScript一起使用。
如果您使用的是CF 8或9,则会将OWASP JAR文件加载到CF中(如果您已正确修补),并且可以通过实例化正确的Java类来直接访问相同的函数。
<cfset application.xssEncoder = createObject("java", "org.owasp.esapi.esapi").encoder() />
<cfoutput>
var myJSvar = '#application.xssEncoder.encodeForJavaScript(form.myField)#';
</cfoutput>