我有这样的结构:
type Page struct {
Content string
}然后我读取一个标记文件并将其赋值给一个变量:
data, err := ioutil.ReadFile("a.md")
lines = string(data)
page.Content = markdownRender([]byte(lines))减价文件如下所示:
##Hello World
###Holo Go然后将其放入标记渲染函数并返回一个字符串值:
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那我该怎么做呢?
发布于 2014-04-21 19:16:41
首先,您的标记输入不太正确-标题应该有分隔#s和文本的空格。您可以使用黑色星期五-工具验证这一点。
$ echo ##Hello | blackfriday-tool
<p>##Hello</p>
$ echo ## Hello | blackfriday-tool
<h2>Hello</h2>其次,如果您将来自blackfriday的HTML输入到一个html/template中,那么为了安全起见,它将自动转义。
如果您信任减价输入和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。
https://stackoverflow.com/questions/23198739
复制相似问题