068. Markdown 解析器——graham-campbell/markdown

Markdown 解析器——graham-campbell/markdown

将 Markdown 渲染成 HTML 是很常见的需求,解析器也很多,今天介绍的这个是一个下载量比较高的扩展包 graham-campbell/markdown,看它的说明知道它是一个 CommonMark 的封装,CommonMark 是一个 Markdown 的规范,依赖了扩展包 league/commonmark

在 Laravel 中使用这个扩展包非常的方便,这节课一起来快速的了解一下。

安装

在一个全新的 5.7 的项目中安装一下:

$ git checkout -b markdown
$ composer require graham-campbell/markdown

file

发布配置文件:

$ php artisan vendor:publish

file

看一下扩展包的配置:

参数 说明
views 渲染 markdown 视图,支持 .md, .md.php, .md.blade.php, 支持 Blade @markdown 指令
extensions 自动加载的扩展
renderer 渲染 HTML 的配置
enable_em 解释 em 标签
use_asterisk * 解释为 斜体
use_underscore _ 解释为 斜体
html_input strip 去除不被信任的 HTML 标签
allow_unsafe_links 允许图片 URL 以及链接,javascript:, vbscript:, file:, data: 协议的链接
max_nesting_level 允许的最大缩进,默认 INF 表示不限制

更具体的参数说明可以参考这里 commonmark.thephpleague.com/config...

config/markdown.php

    'html_input' => 'escape',
    'allow_unsafe_links' => false,

html_input 有三个值可选:

  • strip ——是去除所有的 HTML 标签;
  • escape —— 忽略所有的 HTML 标签,会将他们转义然后显示出来;
  • allow —— 允许 HTML 标签。

我们先设置为 escape。

使用

渲染 Markdown

扩展包可以直接渲染 Markdown 视图文件,比如创建一个 foo.md.blade.php

resources/views/foo.md.blade.php

# test markdown

**加粗**

*斜体*

_斜体_

<del>删除线</del>

<strong>加粗</strong>

> > > > > > > > > > 测试缩进

<script type="text/javascript">
    alert(123)
</script>

不安全的链接:[file](file://foo/bar.png)

安全的链接: [google.com](http://google.com)

![file](https://cdn.learnku.com/uploads/images/201808/06/1/0NBdJjC28V.png?imageView2/2/w/1240/h/0)

asdfasdf
添加一个路由:

routes/web.php

.
.
.
Route::get('markdown', function() {
    return view('foo');
});

file

HTML 标签都被转义显示了出来,file 协议的链接被屏蔽掉了,因为它属于不安全的链接。

如果需要使用 HTML 标签,可以修改配置,设置 html_inputallow

config/markdown.php

    'html_input' => 'allow',

file

file

这样标签就可以正常使用了,但是需要注意 XSS 注入的问题,如果你是需要将用户输入的内容比如一篇博客,需要通过 HTMLPurifier htmlpurifier.org/ 这样的工具过滤一些不安全的标签。

限制缩进

注意这里缩进的显示,有多少个 > 就会缩进多少次,因为配置的是不限制,现在调整一下配置:

config/markdown.php

    'max_nesting_level' => 2,

file

这样就只会显示 2 层缩进,更深的缩进就无效了。

其他的调用方式

其他还能手动将 Markdown 转换成 HTML

use GrahamCampbell\Markdown\Facades\Markdown;

Markdown::convertToHtml('foo'); // <p>foo</p>

还能使用 Blade 的指令 。

@markdown
# Bar
@endmarkdown

还可以通过依赖注入的方式使用,根据自己的需求使用即可,文档写的很清楚了。

支持 emoji

另外一个很重要的是 emoji 表情的支持,需要安装另一个扩展包 github.com/AltThree/Emoji

$ composer require alt-three/emoji

file

config/markdown.php

    'extensions' => [
        AltThree\Emoji\EmojiExtension::class,
    ],

resources/views/foo.md.blade.php

# test markdown

:smiley:

:blush:
.
.
.

file

使用的是 Github 提供的 Emoji 接口,可以在这里查看 api.github.com/emojis

代码版本控制

$ git add -A
$ git commit -m 'graham-campbell/markdown'

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
贡献者:2