FREEMARKER:避免转义 HTML 字符

2024-04-20

freemarker 输出有问题...

                [#assign optionsHTML = ""]                    
                [#list data as item]
                    [#assign optionsHTML = optionsHTML + '<option value="' + item.value +'>'+ item.label + '</option>' /]
                [/#list]

所以,如果我这样做

<select>
${iptionsHTML}
</select>

otions 的输出得到 html 实体而不是实际的 html....所以

&lt;option value=&quot .....

即使我这样做

            [#assign optionsHTML = ""]                    
            [#list data as item]
                [#noescape]
                [#assign optionsHTML = optionsHTML + '<option value="' + item.value +'>'+ item.label + '</option>' /]
                [/#noescape]
            [/#list]

甚至尝试过

<select>
${iptionsHTML?html}
</select>

但更糟糕的是:(


Putting #noescape around #assign没有影响。自动转义仅适用于${...}-s 嵌入的directly到静态文本(HTML)中。所以无法逃避在里面禁用#assign.

?html用于“手动”转义字符串。就像在你的例子中你可以写optionsHTML = optionsHTML + '<option value="${item.value?html}>${item.label?html}</option>',因为您知道该值稍后会以非自动转义的方式输出,并且${...}字符串文字内的 -s 不会自动转义。

但是,最好的情况是您可以组织代码,以便生成 HTML 的内容不会构造 HTML 内部变量然后打印该变量,而是将 HTML 直接打印到输出中。这就是 FTL 的设计目的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FREEMARKER:避免转义 HTML 字符 的相关文章