假设我有数据存储,我无法更改。
在该数据存储区中,我有一个字符串值表:
BROWN
BLUE & RED
YELLOW & PURPLE
BLACK
请注意,值可以包含HTML实体及其coutnerparts(即&
和&
)。
现在,我想将这些值输出为输入值(复选框)。
没有操作,ColdFusion会将&
转换为&
。当选中该复选框并对数据存储进行验证时,它会失败,因为YELLOW & PURPLE
(数据存储值)不等于YELLOW & PURPLE
(表单值)。
以下是我用来输出复选框的当前[伪]代码:
<cfquery name="LOCAL.qColors">
SELECT
COLOR
FROM COLORS
</cfquery>
<cfoutput query="LOCAL.qColors">
<div>
<input
id="color-#CURRENTROW#"
type="checkbox"
class="checkbox"
name="colors"
value="#COLOR#"
#IIF(ListFindNoCase(FORM.colors, COLOR), "'checked'", "")# />
<label for="color-#CURRENTROW#">
#COLOR#
</label>
</div>
</cfoutput>
如何防止ColdFusion解码HTML实体并使用我想要的确切字符串?
答案 0 :(得分:2)
有可能,它与ColdFusion无关,它实际上是您的浏览器(正确)解释页面HTML源代码中的HTML实体。如果您有任何不希望浏览器以HTML格式解析的字符串,则必须将其转义。输出值时使用HTMLEditFormat()函数。
如果您的值包含双引号,这可能尤为重要。作为一般预防措施,绝不将裸露(未转义)文本输出到您的网页中,您不希望其中包含安全的可解析HTML,以解决显示问题和安全问题。
ColdFusion 9及以下
#HTMLEditFormat( arbitraryValue )#
<input name="myOptions" type="checkbox" value="#HTMLEditFormat( arbitraryValue )#">
ColdFusion 10 +
#encodeForHTML( arbitraryValue )#
<input name="myOptions" type="checkbox" value="#encodeForHTMLAttribute( arbitraryValue )#">
然后,您会在页面的HTML源代码中看到&#34; BLUE&amp; RED 强>&#34;成为&#34; BLUE&amp; amp; RED 强>&#34;和&#34; YELLOW&amp; amp; PURPLE 强>&#34;成为&#34; YELLOW&amp; amp; amp; PURPLE 强>&#34 ;.解析该HTML时,表单将使用并提交原始值。