【问题标题】:How to prevent thymeleaf from replacing special characters in HTML attribute values?如何防止 thymeleaf 替换 HTML 属性值中的特殊字符?
【发布时间】:2013-02-14 14:22:48
【问题描述】:

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

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

它创造了

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

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

【问题讨论】:

  • 一种解决方案是扩展此 puprose 的模板编写器。没有设置来配置属性的序列化行为。对我来说,仍然不清楚为什么非百里香属性的属性值被编码。

标签: template-engine thymeleaf


【解决方案1】:

试着玩

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

参见 Thymeleaf 文档Unescaped Text

【讨论】:

  • 谢谢!我试图使用 将一大块 html 插入到模板中,并且疯狂地试图弄清楚为什么 fooHtmlChunk html 被编码!使用 th:utext 而不是 th:text 正是我的问题。
【解决方案2】:

有一些变体需要审查:

  • 如上所述在templateResolver 中使用LEGACYHTML5 选项
  • 在 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);
};

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • CDATA 块在属性值中至少不常见。此外,我使用 HTML 而不是 XHTML,如果我可以使用 CDATA 块,我需要在解释模板之前删除相应的标记。
    • 404 未找到链接
    【解决方案4】:

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

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

    【讨论】:

    • 我们正在使用两阶段模板方法,服务器和客户端。 thymeleaf 与 html 页面集成的方式在这种情况下很有帮助。我们也会切换到另一种更合适的模板解决方案,但还没有找到。自定义方言将是一个解决方案,谢谢。
    【解决方案5】:

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

    【讨论】:

    • 同意,但受青睐的 HTML5 方言需要严格的 XHTML 语法,因此当我们遇到上述问题时对我们没有用处。在我看来,这是模板编写器中的一个错误。非百里香属性的点触属性值在哪里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 2016-06-11
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多