Menu

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 表示不限制

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

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://iocaffcdn.phphub.org/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 http://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 表情的支持,需要安装另一个扩展包 https://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 接口,可以在这里查看 https://api.github.com/emojis

代码版本控制

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

本文章首发在 Laravel China 社区
上一篇 下一篇
讨论数量: 0
发起讨论



暂无话题~
刻意练习,每日精进。
7
点赞
574
浏览
0
讨论