Go语言——快速使用Markdown解析库

简介: Go语言——快速使用Markdown解析库

关于Markdown的语法:Markdown语法文档(翻译)

go解析markdown

Markdown 是一种轻量级的标记语言。设计的目的是通过简单、轻量级的方式来添加格式,而不需要使用 HTML。

markdown解析库

Go 语言中解析 MarkDown 最知名的库就是 russross/blackfriday 了。github 地址为:russross/blackfriday。

Blackfriday是在Go中实现的Markdown处理器。您可以安全地输入用户提供的数据,速度快,支持通用扩展(表,智能标点符号替换等),并且对于所有utf-8(unicode)都是安全的输入。

当前支持HTML输出以及Smartypants扩展。

使用:

  1. 安装:
go get -u github.com/russross/blackfriday
  1. 引入:
improt "github.com/russoss/blackfriday"
  1. 解析 MarkDown 内容:
package main
import (
  "fmt"
  "github.com/russross/blackfriday"
)
func main() {
  input := []byte("### 三级标题")
  output := blackfriday.MarkdownCommon(input)
  fmt.Println(string(output))
}

MarkdownBasic(input []byte) []byte :

MarkdownBasic 是一个方便简单渲染的函数,它处理没有启用扩展的markdown输入。

这里input是[]byte类型,可以将markdown类型的字符串强转为[]byte,即input = []byte(string),返回值是一个转化为HTML格式的``[]byte`类型。

运行输出:

<h3>三级标题</h3>

安全过滤:

blackfriday 库仅实现了 MarkDown 的解析,没有做关于安全注入方面的过滤。若不能保证待解析的内容安全性,例如来自于用户提供的内容,则需要进行内容过滤来保证安全。推荐使用 microcosm-cc/bluemonday 完成。

引入:

go get -u github.com/microcosm-cc/bluemonday

使用:

package main
import (
  "fmt"
  "github.com/russross/blackfriday"
)
func main() {
  input := []byte("### 三级标题")
  unsafe := blackfriday.MarkdownCommon(input)
    output:= bluemonday.UGCpolicy().SanitizeBytes(unsafe)
  fmt.Println(string(output))
}

UGCPolicy() *Policy:

UGCPolicy返回一个针对用户生成内容的策略,该内容是HTML所见即所得工具和Markdown转换的结果。这将是一个相当丰富的文档,其中应该保留尽可能多的标记。Markdown允许原始HTML,所以我们基本上提供了一种策略来安全清理HTML5文档,但对用户期望的格式干扰最小。

源码:

// UGCPolicy returns a policy aimed at user generated content that is a result of HTML WYSIWYG tools and Markdown conversions.
//
// This is expected to be a fairly rich document where as much markup as possible should be retained. Markdown permits raw HTML so we are basically providing a policy to sanitise HTML5 documents safely but with the least intrusion on the formatting expectations of the user.
func UGCPolicy() *Policy{..}

SanitizeBytes(b []byte) []byte:

SanitizeBytes 采用包含 HTML 片段或文档的 []byte 并应用给定的策略允许列表。它返回一个包含已被策略清理的 HTML 的 [] byte,如果发生错误,则返回一个空的 [] byte(很可能是由于输入格式极不正确)

源码:

// SanitizeBytes takes a []byte that contains a HTML fragment or document and applies the given policy allowlist.
//
// It returns a []byte containing the HTML that has been sanitized by the policy or an empty []byte if an error has occurred (most likely as a consequence of extremely malformed input)
func (p *Policy) SanitizeBytes(b []byte) []byte {
  if len(bytes.TrimSpace(b)) == 0 {
    return b
  }
  return p.sanitizeWithBuff(bytes.NewReader(b)).Bytes()
}

基本上就这些操作。

例子:

package main
import (
  "fmt"
  "github.com/microcosm-cc/bluemonday"
  "github.com/russross/blackfriday"
)
func main() {
  input := []byte(`
# 标题1
**加粗**  
*斜体*  
如果你真的想要插入<br />标签的话,在行尾加上两个以上的空白,然后按enter。
[百度](http://www.baidu.com)`)
  unsafe := blackfriday.MarkdownCommon(input)
  output := bluemonday.UGCPolicy().SanitizeBytes(unsafe)
  fmt.Println(string(output))
}

运行结果:

<h1>标题1</h1>
<p><strong>加粗</strong><br/>
<em>斜体</em><br/>
如果你真的想要插入<br/>标签的话,在行尾加上两个以上的空白,然后按enter。
<a href="http://www.baidu.com" rel="nofollow">百度</a></p>

更多关于Markdown的语法见:Markdown语法文档(翻译)

相关文章
|
1天前
|
存储 安全 编译器
go语言中进行不安全的类型操作
【5月更文挑战第10天】Go语言中的`unsafe`包提供了一种不安全但强大的方式来处理类型转换和底层内存操作。包含两个文档用途的类型和八个函数,本文也比较了不同变量和结构体的大小与对齐系数,强调了字段顺序对内存分配的影响。
43 8
go语言中进行不安全的类型操作
|
1天前
|
Go
配置go语言下载包 - 蓝易云
这个命令会将包下载到你的GOPATH目录下,并自动安装它。
25 1
|
2天前
|
安全 Go 调度
Go语言中的并发编程
Go语言自带了强大的并发编程能力,它的协程机制可以让程序轻松地实现高并发。本文将从并发编程的基础概念出发,介绍Go语言中的协程机制、通道和锁等相关知识点,帮助读者更好地理解并发编程在Go语言中的实践应用。
|
4天前
|
Ubuntu Unix Linux
【GO基础】1. Go语言环境搭建
【GO基础】1. Go语言环境搭建
|
5天前
|
JSON 前端开发 Go
lucky - go 语言实现的快速开发平台
go 语言实现的快速开发平台,自动生成crud代码,前端页面通过json配置,无需编写前端代码。
11 0
|
6天前
|
存储 Java Go
Go 语言切片如何扩容?(全面解析原理和过程)
Go 语言切片如何扩容?(全面解析原理和过程)
16 2
|
6天前
|
负载均衡 Go 调度
使用Go语言构建高性能的Web服务器:协程与Channel的深度解析
在追求高性能Web服务的今天,Go语言以其强大的并发性能和简洁的语法赢得了开发者的青睐。本文将深入探讨Go语言在构建高性能Web服务器方面的应用,特别是协程(goroutine)和通道(channel)这两个核心概念。我们将通过示例代码,展示如何利用协程处理并发请求,并通过通道实现协程间的通信和同步,从而构建出高效、稳定的Web服务器。
|
6天前
|
程序员 Linux iOS开发
一款比Typora更简洁优雅的Markdown编辑器神器(完全开源免费)
一款比Typora更简洁优雅的Markdown编辑器神器(完全开源免费)
|
6天前
《使用「Markdown」编辑器的那些天 |CSDN编辑器测评》
《使用「Markdown」编辑器的那些天 |CSDN编辑器测评》
29 0
|
6天前
|
机器学习/深度学习 uml
Markdown编辑器用法保存自用
Markdown编辑器用法保存自用

推荐镜像

更多