如何防止ColdFusion转换HTML实体?

时间:2014-09-08 20:57:38

标签: coldfusion html-entities coldfusion-8

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

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

  • 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实体并使用我想要的确切字符串?

1 个答案:

答案 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时,表单将使用并提交原始值。