Golang 使用 blackfriday 将 Markdown 转换为 HTML

更新日期: 2019-10-30 阅读次数: 913 字数: 347 分类: golang

在用 golang gin 写一个人民币大写转换的工具,网页中的描述信息是在网站后台以 markdown 形式编辑保存的,在前端展示时需要将 markdown 转换为 html。

在网上找了一圈,就发现一个库用的人比较多,那就是 blackfriday。

Golang blackfriday 的项目地址

https://github.com/russross/blackfriday

列表的渲染有问题

用的过程中发现一个问题,列表渲染时,会将下一行的文字,缀到一行。查了半天没找到原因。

突然在文档里找到一个说明:

Hard line breaks. With this extension enabled (it is off by default in the MarkdownBasic and MarkdownCommon convenience functions), newlines in the input translate into line breaks in the output.

对应的配置为

HardLineBreak // Translate newlines into line breaks

如果不启用这个配置,就需要在行尾使用两个空格加换行的方式来表示 markdown 换行。

到了线上又发现一个问题,生产环境本地调试环境运行结果不一致,线上还是排版有问题。后来发现是线上编辑器的换行里包含 "\r"。

类似的一个问题

https://github.com/russross/blackfriday/issues/394

替换掉斜杠 r 就可以了。

实现代码

package controllers

import (
	"bytes"
	"github.com/gin-gonic/gin"
	"gopkg.in/russross/blackfriday.v2"
	"html/template"
	"net/http"
	"sunzhongwei.com/go_tool/models"
)

func ChineseMoneyIndex(c *gin.Context) {
	kv, _ := models.GetValue("chinese_money")
	desc_data := []byte(kv.Description)
	desc_data = bytes.Replace(desc_data, []byte("\r"), nil, -1)
	description := string(blackfriday.Run(
		desc_data,
		blackfriday.WithExtensions(blackfriday.CommonExtensions|blackfriday.HardLineBreak),
	))
	c.HTML(http.StatusOK, "chinese_money_index.html", gin.H{
		"kv":          kv,
		"description": template.HTML(description),
	})
}

使用方法参考

https://github.com/russross/blackfriday/issues/394

文档

https://godoc.org/gopkg.in/russross/blackfriday.v2

关于作者

我是来自山东烟台的一名开发者,喜欢瞎折腾,顺便记记笔记。有敢兴趣的话题,欢迎加微信 zhongwei 聊聊。 白天工地搬砖,晚上哄熊孩子,可能回复有点慢,见谅。 查看更多联系方式

相关文章

爱评论不评论

近期节日

2020年02月24日 第三世界青年日
2020年02月24日 龙抬头
2020年02月28日 世界居住条件调查日
2020年03月01日 国际海豹日
2020年03月03日 全国爱耳日
2020年03月05日 学雷锋日
2020年03月05日 惊蛰
2020年03月08日 三八妇女节
2020年03月12日 植树节
2020年03月14日 白色情人节
2020年03月15日 消费者权益日
2020年03月17日 国际航海日
查看更多节日