FREEMARKER:避免转义 HTML 字符

4

遇到freemarker输出问题怎么办...

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

所以,如果我执行

<select>
${iptionsHTML}
</select>

选项输出的是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>

但这甚至更糟 :(

你尝试过在输出周围加上noescape吗?[#noescape]${optionsHTML}[/#noescape] - Goose
请注意,[#noescape]现已弃用。请参阅自Freemaker 2.3.24以来的新功能:freemarker.org/docs/dgui_misc_autoescaping.html - Adriano
4个回答

2
#assign周围放置#noescape没有效果。自动转义仅适用于直接嵌入静态文本(HTML)的${...}。因此,在#assign内部没有要禁用的转义。 ?html用于手动转义字符串。就像在您的示例中,您可以编写optionsHTML = optionsHTML + '<option value="${item.value?html}>${item.label?html}</option>',因为您知道值将在稍后以非自动转义的方式输出,并且字符串文字中的${...}不会自动转义。
但是,最好的方法是组织代码,使生成HTML的内容不会构造存储在变量中并随后打印该变量,而是直接将HTML打印到输出中。这就是FTL的设计目的。

2

在尝试过一些方法后,我不知道之前做错了什么,但是现在清理后,这个方法可以正常工作。

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



<select>
   [#noescape]
   ${optionsHTML}
   [/#noescape]
</select>

0

我在带有特殊字符的字符串中遇到了同样的问题。 在这个例子中,我有一个checknumber = "6547&6548" 在使用#escape之前会导致问题。

处理这个问题的最好和简单的方法如下所示:

<#escape x as x?html>${deposit.checkNumber}</#escape>

0

就像ddekany所说,编写类似于以下内容的代码:

<select>
  [#list data as item]
    <option value="${item.value}">${item.label}</option>
  [/#list]
</select>

是的,我做了,但后来我不得不使用2个列表...可能没有提到那部分...我之所以用构建HTML字符串变量来完成它,是为了避免两次迭代列表(一次用于输出选择选项,另一次用于获取标签,这是通过检查所选选项确定的...我只需要简化这个例子,这样我就可以得到我实际需要的答案。 - DS_web_developer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接