JSTL core tag的<c:out>及fn:escapeXml();用來處理XML或HTML中被視為標記(markup)的字元,會將其轉成一般字串處理,(?)。
也就是說,若從後端輸出的字串中帶有特殊字元,例如斜線(slash)"/",反斜線(back-slash)"\","<",">"等等,若要其表現方式為字串而非成為HTML的效果或避免不必要的影響,就使用<c:out>來處理比較好。
<c:out>的escapeXml屬性預設為true,其功能就同fn:escapeXml();,若改為false則為關閉,例如
<c:out value="${employee.name}" escapeXml="false" default="NA"/>
<c:out>的屬性(attribute)除了espaceXml外,還有value及default。
value是必填的屬性,作用輸出server端帶出的值,可以是個單一變數,或是一個bean。
<c:out>功能類似JSP scriptlet的<%= ... %>,差異是<c:out>除了上面的escapeXml功能外,還可直接用 "." 來存取Java Bean的性質,例如上面範例的 value=${employee.name}。
default是option的屬性,作用是若value輸出的結果為null,則會以default的值取代。
示例:
当您正在访问内部参数时,仅将 escapeXML 属性设置为 false,而不是在 URL 上指定参数或属性。使用未转义的 URL 参数时,这些页面易受 XSS 攻击的影响。
<c:out value="${product.listPrice}" />
作为日元符号,¥使用 ¥ 命名的字符实体显示,缺省转换将导致显示为 ¥3,544 的 ¥ 3,544 的价格。
要防止此转换,应该将 escapeXml 显示设置为 false,如下所示:
<c:out value="${product.listPrice}" escapeXml="false" />
<c:out value="${product.listPrice}" />
作为日元符号,¥使用 ¥ 命名的字符实体显示,缺省转换将导致显示为 ¥3,544 的 ¥ 3,544 的价格。
要防止此转换,应该将 escapeXml 显示设置为 false,如下所示:
<c:out value="${product.listPrice}" escapeXml="false" />