【问题标题】:Magnolia rich text fieldsMagnolia 富文本字段
【发布时间】:2016-11-25 07:55:37
【问题描述】:

我正在考虑将 Magnolia 中的富文本直接输出到前端。我将字段定义如下:

@TabFactory("Content")
public void contentTab(UiConfig cfg, TabBuilder tab) {
    tab.fields(
            cfg.fields.text("title").label("Title"),
            cfg.fields.richText("subtitle").label("Subtitle")
    );
}

在模板中,当信息保存到 JCR 中时,它似乎使用 HTML 实体对数据进行编码:

Title: ${content.title}
Subtitle: ${content.subtitle}

输出(原始源)...

Title: The Title Field
Subtitle: <p>The Subtitle Field</p>

但应该输出(原始源)...

Title: The Title Field
Subtitle: <p>The Subtitle Field</p>

有没有办法阻止富文本字段被自动编码?

【问题讨论】:

    标签: java magnolia


    【解决方案1】:

    大多数框架都试图摆脱XSS-kind 的攻击,因此使用以下模板是一个好方法:

    Title: ${content.title}
    Subtitle: <p>${content.subtitle}</p>
    

    它将阻止用户(或管理员)在客户端运行魔术 JS 或其他一些不良代码。

    回到问题:在这里查看文档https://documentation.magnolia-cms.com/display/DOCS/Component+definition。有一个叫escapeHtml的东西看看吧。 :)

    编辑:bashaus 指出他使用的是页面属性而不是组件。这种方式的解决方法如下:

    [#if content.text?has_content]
        ${cmsfn.decode(content).text}
    [/#if]
    

    TL.DR:尽量避免动态内容中出现html字符,但该功能可以关闭。

    【讨论】:

    • 谢谢 - 但我没有使用组件,我正在为这个特定项目使用页面属性。关于如何为属性执行此操作的任何想法(使用上面的选项卡项)
    【解决方案2】:

    解码功能起作用: https://documentation.magnolia-cms.com/display/DOCS/cmsfn#cmsfn-DecodeHTML

    [#if content.text?has_content]
        ${cmsfn.decode(content).text}
    [/#if]
    

    【讨论】:

    • 好吧,显然它会起作用,但这并没有从一开始就停止编码。
    • 是的,我想找到更好的方法
    • 这是 Magnolia 输出 html 的标准方式。
    猜你喜欢
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 2022-09-02
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 2013-02-07
    • 1970-01-01
    相关资源
    最近更新 更多