go语言实现markdown解析库的方法示例
Blackfriday是在Go中实现的Markdown处理器。您可以安全地输入用户提供的数据,速度快,支持通用扩展(表,智能标点符号替换等),并且对于所有utf-8(unicode)都是安全的输入。
当前支持HTML输出以及Smartypants扩展。
使用
首先当然要引入:
import github.com/russross/blackfriday
然后
output := blackfriday.MarkdownBasic(input)
这里input是[]byte类型,可以将markdown类型的字符串强转为[]byte,即input = []byte(string)
如果想过滤不信任的内容,使用以下方法:
代码:
package main import ( "fmt" "github.com/microcosm-cc/bluemonday" "github.com/russross/blackfriday" ) func main() { input := []byte("### 5lmh.com是个不错的go文档网站") unsafe := blackfriday.MarkdownCommon(input) html := bluemonday.UGCPolicy().SanitizeBytes(unsafe) fmt.Println(string(html)) }
基本上就这些操作
我的使用方法是在添加新文章时,将表单提交的数据直接通过上面的方法转换后,将markdown和转换后的内容都存储到数据库中
不过我在前端渲染时,又出现了问题,就是转换后的内容中的html标签会直接显示在网页上,为避免这种状况,我使用了自定义模板函数
// 定义模板函数 func unescaped(x string) interface{} { return template.HTML(x)} // 注册模板函数 t := template.New("post.html") t = t.Funcs(template.FuncMap{"unescaped": unescaped}) t, _ = t.ParseFiles("templates/post.html") t.Execute(w, post) // 使用模板函数 {{ .Content|unescaped }}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
Django渲染Markdown文章目录的方法示例
对会读书的人来说,读一本书要做的第一件事,就是仔细阅读这本书的目录.阅读目录可以对整体内容有所了解,并清楚地知道感兴趣的部分在哪里,提高阅读质量. 博文也是同样的,好的目录对博主和读者都很有帮助.更进一步的是,还可以在目录中设置锚点,点击标题就立即前往该处,非常的方便. 文中的目录 之前我们已经为博文支持了Markdown语法,现在继续增强其功能. 有折腾代码高亮的痛苦经历之后,设置Markdown的目录扩展就显得特别轻松了. 修改文章详情视图: article/views.py ... # 文
-
漂亮的Django Markdown富文本app插件的实现
django-mdeditor Github地址:https://github.com/pylixm/django-mdeditor欢迎试用,star收藏! Django-mdeditor 是基于Editor.md的一个 django Markdown 文本编辑插件应用. Django-mdeditor 的灵感参考自伟大的项目django-ckeditor. 功能 支持 Editor.md 大部分功能 支持标准的Markdown 文本. CommonMark 和 GFM (GitHub Flav
-
go语言实现markdown解析库的方法示例
Blackfriday是在Go中实现的Markdown处理器.您可以安全地输入用户提供的数据,速度快,支持通用扩展(表,智能标点符号替换等),并且对于所有utf-8(unicode)都是安全的输入. 当前支持HTML输出以及Smartypants扩展. 使用 首先当然要引入: import github.com/russross/blackfriday 然后 output := blackfriday.MarkdownBasic(input) 这里input是[]byte类型,可以将markdo
-
Go语言反射获取类型属性和方法示例
本系列文章,我将会进一步加深对 Go 语言的讲解,更一步介绍 Go 中的包管理.反射和并发等高级特性. 前面一篇文章主要介绍了 reflect.Type 类型对象.本文将会继续介绍 Go 反射 reflect.StructField 和 reflect.Method 相关的内容. reflect.StructField 和 reflect.Method 如果变量是一个结构体,我们还可以通过结构体域类型对象 reflect.StructField 来获取结构体下字段的类型属性.Type 接口下提供
-
C++使用jsoncpp解析json的方法示例
前言: 曾经一段时间XML成为互联网业界内的数据传输格式标准,但有人对XML提出了质疑,认为XML数据格式比较繁杂,冗长等,于是提出了一种新的表示格式-JSON. 对于JSON格式,在此就不作详细的说明了,下面主要讨论下C++解析json文件的工具-Jsoncpp的使用. JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,和xml类似,本文主要对VS2008中使用Jsoncpp解析json的方法做一下记录. Jsoncpp是个跨平台的开源库,下载地址:
-
Python CSV 文件解析和生成方法示例
目录 思路 Python with CSV CSV 格式 使用 Python 的 csv 库 其他 思路 简单的生成和读取 CSV CSV 文件格式 使用 csv 库 Python with CSV 先有个很朴素的生成和解析的方法. 生成: data = [ [1, 2, 3], [4, 5, 6], [7, 8, 9], ] for cow in data: print(','.join(map(str, cow))) 生成结果: 1,2,34,5,67,8,9 解析 s = ""&
-
C语言中可变参数的使用方法示例
前言 在C语言程序编写中我们使用最多的函数一定包括printf以及很多类似的变形体.这个函数包含在C库函数中,定义为 int printf( const char* format, ...); 除了一个格式化字符串之外还可以输入多个可变参量,如: printf("%d",i); printf("%s",s); printf("the number is %d ,string is:%s", i, s); 格式化字符串的判断本章暂且不论,下面分析一
-
在易语言中使用类型库的方法
如何在易语言中使用类型库 如何在易语言中使用类型库,我们下面用一个小例程来说明,首先打开"易语言" 选择"工具"→"类型库及OCX组件-〉支持库"注册word类型库. 然后左边支持库表中会出现word的类型库 然后我们在窗体中画上两个按钮以便我们使用,至于旁边画的那个com控件我们等一下 现在我们开始写入代码,如果按照com对象的方法来操作word,我们就要先创建一个word的对象,连接"Word.Application",其
-
PHP基于SimpleXML生成和解析xml的方法示例
本文实例讲述了PHP基于SimpleXML生成和解析xml的方法.分享给大家供大家参考,具体如下: xml就不多解释了,php也提供了操作xml的方法,php操作xml可以有多种方式如domdocment,simplexml,xmlwriter等其中最简单的应该是simplexml了,这次就来说说simplexml怎么读取和解析xml文件或字符串 1. 生成xml字符串和文件 <?php header("Content-type: text/html; charset=utf-8"
-
Python利用BeautifulSoup解析Html的方法示例
介绍 Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能.它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序. Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码.你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了.然后,你仅仅需要说明一下原始编码方式就可以了. Beautiful
-
微信小程序使用wxParse解析html的方法示例
本文实例讲述了微信小程序使用wxParse解析html的方法.分享给大家供大家参考,具体如下: 首先去 https://github.com/icindy/wxParse 下载wxParse,只拷贝wxParse文件夹即可. 或者点击此处本站下载. 一.首先将插件文件夹复制到项目里面 二.导入文件 首先在xx.wxml导入文件,在文件头写上: <import src="../../wxParse/wxParse.wxml"/> 然后再wxss导入文件,在文件头写上: @im
-
用pybind11封装C++实现的函数库的方法示例
现有若干用C++编写的函数,为了能够用Python调用它们,可以通过pybind11将它们封装到一个Python模块中,在编写Python程序时只要导入该模块便能使用这些函数. 一.实现步骤 用C++函数实现函数功能: 编写头文件,将函数的声明包含在头文件中: 编写pybind11封装函数: 用Python编写setup脚本: 生成动态链接库pyd文件: 测试函数功能. 二.代码实现 1.用C++函数实现函数功能 //文件名:add.cpp extern "C" double add(
随机推荐
- MediaPlayer 在线播放器代码
- 微信小程序开发图片拖拽实例详解
- THREE.JS入门教程(1)THREE.JS使用前了解
- 深入探讨:Oracle中如何查询正锁表的用户以及释放被锁的表的方法
- Oracle 系统变量函数用法指南
- ASP.NET 程序中删除文件夹导致session失效问题的解决办法分享
- 用文本文件实现的动态实时发布新闻的程序
- php输出xml必须header的解决方法
- C#正则表达式使用方法示例
- MySQL的常用命令集锦
- mysql use命令选择数据库详解
- Oracle删除字段中的空格、回车及指定字符的实例代码
- jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
- ASP编程入门进阶(十八):FSO组件之文件操作(下)
- Flash 实用代码总汇第1/2页
- 添加新的.shtml的影射
- SpringMVC的源码解析
- Android仿泡泡窗实现下拉菜单条实例代码
- php+iframe实现隐藏无刷新上传文件
- C++ 智能指针的模拟实现实例