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