如何防止thymeleaf替换HTML属性值中的特殊字符?

时间:2013-02-14 14:22:49

标签: template-engine thymeleaf

我正在将Thymeleaf与js微模板例程结合使用,这会在属性值中产生特殊字符。在运行Thymeleaf时

<a style="display:<%= x ? 'block' : 'none' %>;">

它创建

<a style="display:&lt;%= x ? &#39;block&#39; : &#39;none&#39; %&gt;;">

虽然我希望得到与处理器完全相同的内容。 如何在HTML属性值中使用特殊字符? 非常感谢!

5 个答案:

答案 0 :(得分:8)

尝试使用

th:utext="#{unescaped text}"> 

请参阅Thymeleaf doc Unescaped Text

答案 1 :(得分:1)

有一些变体需要审核:

  • 如上所述在LEGACYHTML5中使用templateResolver选项
  • 在Underscore.js中覆盖template方法

我更喜欢第二种方法。将此代码放在初始化脚本中:

var original = _.template;
_.template = function(content) {
    // fix operators escaped by Thymeleaf HTML5 validator
    content = content.replace(/&#39;/g, "'");
    content = content.replace(/&lt;/g, "<");
    content = content.replace(/&gt;/g, ">");
    return original.call(this, content);
};

答案 2 :(得分:0)

您可以尝试用CDATA块包围您的代码。

http://www.w3schools.com/xml/xml_cdata.asp

答案 3 :(得分:0)

我不确定其他模板模式,但我知道html5和xml不会让你这样做,因为thymeleaf生成的文件不会对doctype进行验证。所以至少在那些模式中,我认为这是不可能的。 (也许用自定义方言?)

那么为什么要在同一页面上使用两个模板工具呢?

答案 4 :(得分:0)

正如hubbardr已经建议的那样,使用LEGACYHTML5作为模板模式可能会对你有帮助。