Magnolia 富文本字段

Magnolia rich text fields

我正在考虑将 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>

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

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

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个字符,但该功能可以关闭。

解码功能有效: https://documentation.magnolia-cms.com/display/DOCS/cmsfn#cmsfn-DecodeHTML

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