【问题标题】:Rendering HTML in a GSP在 GSP 中呈现 HTML
【发布时间】:2014-04-01 02:37:23
【问题描述】:

我在数据库表(博客文章)中有一些内容是受信任的内容,我想在屏幕上显示。此内容是 HTML,并且有一些使用 Prism.js 进行语法高亮的代码示例。由于 gsp 页面上的 HTML 编码,我需要使用 raw 方法按原样输出内容

${raw(post.content)}

这很好用,除了当我获得包含在代码示例标签中的代码时。与其将其显示为代码,不如将其输出为我不想要的原始 html。我不知何故需要对其中的文本进行编码,因为如果我不这样做,我最终会得到看起来像这样的东西。

我知道我可以在保存时进行编码,但我已经有数百个帖子不是这种情况。有什么想法吗?

【问题讨论】:

  • 我不确定,但你可以试试 ${post.teaser.encodeAsHTML()}
  • 整个帖子是 ${post.content} 你所看到的那篇帖子的一个子集 - 来自另一篇博文的代码示例
     这里有一堆标记 ${raw(post.teaser)} 
  • 这是博客文章在数据库中的样子,从上图可以看出它是如何呈现的。 gist.github.com/cfaddict/9912759
  • 我猜需要做的是获取内容并将其传递给服务函数,该函数将查看是否需要编码任何内容。如果它找到任何 标签,请使用一些正则表达式来查找/替换这些标签之间的任何内容与编码的内容。我很讨厌正则表达式,这应该很有趣。
  • @havetchecked 已发布...如果有帮助,请告诉我。对不起,我完全忘了发布这个:)

标签: grails gsp


【解决方案1】:

就我而言,我必须在视图中抓取原始内容

${raw(post.getEscapedContent())}

然后在域对象中我转义了代码块内的任何内容

/**
 * I will return the content of a post with the necessary html escaping. To render html in code blocks we
 * need to escape any html inside of <code></code>
 * @return String
 */
def getEscapedContent(){
    content.replaceAll(/(?ms)(<code.*?>)(.*?)(<\/code>)/) { it, open, code, close ->
        open + code.encodeAsHTML() + close
    }
}

【讨论】:

    猜你喜欢
    • 2015-09-20
    • 2011-11-13
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    相关资源
    最近更新 更多