gpt4 book ai didi

templates - 如何在 Go 中使用 Blackfriday 将 markdown 渲染为 html?

转载 作者:IT王子 更新时间:2023-10-29 02:00:03 25 4
gpt4 key购买 nike

我有一个这样的结构:

type Page struct {
Content string
}

然后我读取一个 Markdown 文件并分配给一个变量:

data, err := ioutil.ReadFile("a.md")
lines = string(data)
page.Content = markdownRender([]byte(lines))

markdown文件是这样的:

##Hello World

###Holo Go

然后我将它放入 Markdown 渲染函数并返回一个字符串值:

func markdownRender(content []byte) string {
htmlFlags := 0
htmlFlags |= blackfriday.HTML_USE_SMARTYPANTS
htmlFlags |= blackfriday.HTML_SMARTYPANTS_FRACTIONS

renderer := blackfriday.HtmlRenderer(htmlFlags, "", "")

extensions := 0
extensions |= blackfriday.EXTENSION_NO_INTRA_EMPHASIS
extensions |= blackfriday.EXTENSION_TABLES
extensions |= blackfriday.EXTENSION_FENCED_CODE
extensions |= blackfriday.EXTENSION_AUTOLINK
extensions |= blackfriday.EXTENSION_STRIKETHROUGH
extensions |= blackfriday.EXTENSION_SPACE_HEADERS

return string(blackfriday.Markdown(content, renderer, extensions))
}

最后我在 html 模板中调用 page.Content 并生成静态 html:

{{.Content}}

但是在生成的html中它在浏览器中显示(我在chrome和safari中试过)是这样的(不是源代码,它只是在页面中显示):

<p>##Hello World ###Holo Go </p>

但我想要这样

Hello World

Holo Go

那么,我该怎么做呢?

最佳答案

首先,您的 Markdown 输入不太正确——标题应该用空格将 # 与文本分开。您可以使用 blackfriday-tool 验证这一点:

$ echo ##Hello | blackfriday-tool
<p>##Hello</p>

$ echo ## Hello | blackfriday-tool
<h2>Hello</h2>

其次,如果您将 blackfriday 的 HTML 输出提供给 html/template,为了安全起见,它将自动转义。

如果您信任 markdown 输入和 blackfriday 的 HTML 输出,那么您可以通过将内容包装在 html/template 中告诉模板系统信任内容 HTML值:

type Page struct {
Content template.HTML
}

err = t.ExecuteTemplate(w, "page", Page{Content: template.HTML(s)})

参见 http://play.golang.org/p/eO7KDJMlb8举个例子。

关于templates - 如何在 Go 中使用 Blackfriday 将 markdown 渲染为 html?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23198739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com