哪个是正确的?
<img src="#encodeForHTMLAttribute(FORM.path)#">
或者
<img src="#encodeForURL(FORM.path)#">
或者
<img src="#encodeForHTMLAttribute(encodeForURL(FORM.path))#">
?
最佳答案
使用与插入需要编码的文本的上下文相匹配的方法。
encodeForUrl 用于将动态文本放入 URL - 因此它将替换 /
与 %2F
( and so on ),如果你将它应用到整个 URL,你将拥有一个编码的 URL(因此它在 src 属性中被破坏)。
如果您允许用户提供部分 URL,则需要拆分 /
(和任何其他相关的分隔符),在每个部分应用 encodeForUrl,然后再次连接在一起。
注: encodeForUrl 似乎将其字符串直接传递给 Java,这意味着反斜杠被视为转义字符 - \b\n
编码为 %08%0A
而不是 %5Cb%5Cn
- 此行为不是标准 URL 编码的一部分(通常也不是 CF 字符串)。为避免这种情况,请改用 UrlEncodedFormat 函数。
encodeForHTMLAttribute 用于将动态文本放入 HTML 属性中 - 其目的是确保将内容视为文本(而不是解析为 HTML) - 它不知道/关心其内容是 URL 还是其他内容。
总结 ,你可能想要 encodeForHtmlAttribute( UrlEncodedFormat( Form.Path ) )
对于这种情况。
关于coldfusion - esapi:对于 src 属性,我们应该使用 encodeForHTMLAttribute 吗?编码ForURL?或两者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12923662/