在 Laravel 中借助 erusev/parsedown 包解析 Markdown 文本的正确方式

Laravel 在 5.4 版本中天然包含了将 Markdown 语法转换成 HTML 的工具包 erusev/parsedown

它主要的方法有两个:textsetMarkupEscaped。使用方式如下:

echo Parsedown::instance()
   ->setMarkupEscaped(true)
   ->text("<div><strong>*Some text*</strong></div>");

# 输出:
# <p><div><strong><em>Some text</em></strong></div></p>

text 指定要转换的 Markdown 文本;setMarkupEscaped 设置为 true 表示转义文本里的 HTML 标签,比如把 < 转换为 <,以 避免外部脚本攻击

它在 Laravel 的 Blade 模板文件里是这样使用的:

{!! Parsedown::instance()->setMarkupEscaped(true)->text($discussion->body) !!}

下面举两个例子:

  1. 当我转义的文本是 <script> console.log('Oops!'); </script> 的时候,被解析为
<p><p><script> console.log('Oops!');</script></p></p>
  1. 当我转义的文本是 ```<script> console.log('Oops!'); </script>```
    的时候,被解析为
<p><code><script> console.log('Oops!'); </script></code></p>

更多使用细节,可以查阅这里的 教程

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 4年前 自动加精
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7

你好请问一下为什么discussion->body那里会显示undefined variable,应该怎么修改呢

6年前 评论

@邱俊基 是不是 $discussion->body 呢。

6年前 评论

@zhangbao 请问这个语句是解析单个md格式的句子的意思吗,那可不可以解析一整个md文件然后显示在网页呢

6年前 评论

@邱俊基 不能解析整个 .md 文件 但可以解析整个文件里的内容

6年前 评论

@zhangbao 就是把md文件内容显示出来吗,请问应该怎么弄呢

6年前 评论

请问用pharsedown可以依据内容生成文章目录吗,如果不能的话用什么插件才能实现这个功能呢?

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!