PHP 中更好的 Markdown 解析器 — 演示
安裝作曲家包:
composer require erusev/parsedown
或下載最新版本並包含Parsedown.php
$ Parsedown = new Parsedown ();
echo $ Parsedown -> text ( ' Hello _Parsedown_! ' ); # prints : < p > Hello < em > Parsedown </ em >!</ p >
您也可以僅解析內嵌降價:
echo $ Parsedown -> line ( ' Hello _Parsedown_! ' ); # prints : Hello < em > Parsedown </ em >!
維基百科和本影片教學中有更多範例。
Parsedown 能夠在其產生的 HTML 中轉義使用者輸入。此外,Parsedown 也會對 Markdown 語法本身引入的其他腳本向量(例如腳本連結目標)進行清理。
要告訴 Parsedown 它正在處理不受信任的使用者輸入,請使用以下命令:
$ Parsedown -> setSafeMode ( true );
相反,如果您希望允許在不受信任的使用者輸入中使用 HTML,但仍希望輸出不受 XSS 的影響,建議您使用允許將 HTML 標記列入白名單的 HTML 清理程序,例如 HTML Purifier。
在這兩種情況下,您都應該強烈考慮採用縱深防禦措施,例如部署內容安全策略(瀏覽器安全功能),以便即使攻擊者在第一個中發現漏洞,您的頁面也可能是安全的上面的防線。
使用 Parsedown 擴充功能時,安全模式不一定會產生安全性結果。應自行評估擴充功能以確定其針對 XSS 的特定安全性。
警告:此方法無法抵禦 XSS!
如果您希望在受信任的輸入中轉義 HTML,您可以使用以下命令:
$ Parsedown -> setMarkupEscaped ( true );
請注意,這仍然允許使用者插入不安全的腳本向量,例如: [xss](javascript:alert%281%29)
。
Parsedown 是如何運作的?
它嘗試像人類一樣閱讀 Markdown。首先,它看線條。它對線路如何開始感興趣。這有助於它識別塊。例如,它知道如果一行以-
開頭,那麼它可能屬於一個列表。一旦它識別出塊,它就會繼續處理內容。當它讀取時,它會留意特殊字元。這有助於它識別內聯元素(或內聯)。
我們將這種方法稱為「基於線路」。我們相信 Parsedown 是第一個使用它的 Markdown 解析器。自從 Parsedown 發布以來,其他開發人員已經使用相同的方法來用 PHP 和其他語言開發其他 Markdown 解析器。
是否符合 CommonMark 標準?
它通過了大部分 CommonMark 測試。大多數未通過的測試都涉及非常不常見的情況。不過,隨著 CommonMark 的成熟,合規性應該會得到改善。
誰使用它?
Laravel Framework、Bolt CMS、Grav CMS、Herbie CMS、Kirby CMS、October CMS、Pico CMS、Statamic CMS、phpDocumentor、RaspberryPi.org、Symfony Demo 等。
我能提供什麼幫助嗎?
使用它、加註星標、分享它,如果您感到慷慨,請捐贈。
我還應該知道什麼?
我還製作了 Nota——一個專為本地 Markdown 文件設計的筆記應用程式。