在 Laravel 中藉助 erusev/parsedown 包解析 Markdown 文字的正確方式

zhangbao發表於2017-08-17

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 協議》,轉載必須註明作者和本文連結

相關文章