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