一尘不染

白名单标签免于使用Go的html / template进行转义

go

将[]字节传递到模板中,作为论坛风格的Web应用程序上的消息发布的正文。在模板中,调用一个方法以转换为字符串,并一路切换所有换行符以换行:

<p>{{.BodyString}}</p>

func (p *Post) BodyString() string {
    nl := regexp.MustCompile(`\n`)
    return nl.ReplaceAllString(string(p.Body), `<br>`)
}

最终结果是:

paragraphs <br> <br>in <br> <br>this <br> <br>post

我不想用HTML(p.Body)传递整个帖子,因为它表示来自潜在不可靠来源的第三方数据。有没有一种方法可以使用Vanilla
Go1模板包将仅某些标签用于格式设置白名单?


阅读 338

收藏
2020-07-02

共1个答案

一尘不染

我确实认为您想解析HTML。exp / html中的HTML解析器被认为是不完整的,因此已从Go
1中删除,尽管exp树仍位于Go源树中,并且例如可以通过每周标签进行访问。我不知道到底什么是不完整的。我曾经将它用于一个简单的任务,它满足了我的需求。

当然,还可以检查仪表板并查看相关的SO帖子,Go1之后是否有任何聪明的方法来获取exp/ html?,主要用于推荐http://code.google.com/p/go-html-transform/

2020-07-02