我正在考虑将Magnolia中的Rich Text直接输出到前端。我正在定义如下字段:
@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>
有没有办法阻止Rich Text字段自动编码?
答案 0 :(得分:1)
解码功能有效: https://documentation.magnolia-cms.com/display/DOCS/cmsfn#cmsfn-DecodeHTML
[#if content.text?has_content]
${cmsfn.decode(content).text}
[/#if]
答案 1 :(得分:0)
大多数框架试图摆脱XSS类型的攻击,因此这是一种使用模板的好方法:
Title: ${content.title}
Subtitle: <p>${content.subtitle}</p>
它会阻止用户(或管理员)在客户端上运行magic 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字符,但该功能可以关闭。