假设我有无法更改的数据存储。
在这个数据存储中,我有一个字符串值表:
BROWN
BLUE & RED
YELLOW & PURPLE
BLACK
请注意,这些值可以包含HTML实体及其对应部分(即&
和&
)。
现在,我想将这些值作为输入值(复选框)输出。
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实体并只使用我想要的确切字符串?
很可能,它与ColdFusion无关,它实际上是您的浏览器(正确地)解释页面HTML源中的HTML实体。如果您有任何字符串不希望浏览器将其解析为HTML,则必须对其进行转义。输出值时请使用HTMLEditFormat()函数。
如果您的值包含双引号,这一点可能特别重要。作为一般预防措施,NEVER在网页中输出裸文本(未显示),因为显示问题和安全问题,您不希望网页中有安全的可解析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源代码中看到,"蓝色和红色"变为"蓝色和红色","黄色和紫色"变为"黄色和蓝色。当HTML被解析时,原始值将被使用并由表单提交。