如何阻止ColdFusion转换HTML实体



假设我有无法更改的数据存储。

在这个数据存储中,我有一个字符串值表:

  • 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被解析时,原始值将被使用并由表单提交。

最新更新