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 >!
他の例については、Wiki とこのビデオ チュートリアルを参照してください。
Parsedown は、生成する HTML 内のユーザー入力をエスケープできます。さらに、Parsedown は、マークダウン構文自体によって導入される追加のスクリプト ベクトル (スクリプトのリンク先など) にサニタイズを適用します。
Parsedown に信頼できないユーザー入力を処理していることを伝えるには、次を使用します。
$ Parsedown -> setSafeMode ( true );
代わりに、信頼できないユーザー入力内で HTML を許可したいが、出力には XSS を適用しないようにしたい場合は、HTML Purifier など、HTML タグをホワイトリストに登録できる HTML サニタイザーを使用することをお勧めします。
どちらの場合も、Content-Security-Policy (ブラウザのセキュリティ機能) を導入するなど、多層防御の手段を採用することを強く検討してください。これにより、攻撃者が最初の脆弱性のいずれかに脆弱性を見つけた場合でも、ページは安全である可能性が高くなります。上の防御線。
Parsedown の拡張機能を使用する場合、セーフ モードでは必ずしも安全な結果が得られるわけではありません。拡張機能を独自に評価して、XSS に対する具体的な安全性を判断する必要があります。
警告: この方法は XSS に対して安全ではありません。
信頼できる入力で HTML をエスケープしたい場合は、以下を使用できます。
$ Parsedown -> setMarkupEscaped ( true );
これにより、ユーザーは依然として安全でないスクリプト ベクター (例: [xss](javascript:alert%281%29)
挿入できることに注意してください。
パースダウンはどのように機能しますか?
人間のように 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 など。
どうすれば助けられますか?
使用し、スターを付け、共有し、寛大だと感じたら寄付してください。
他に何を知っておくべきですか?
また、ローカルの Markdown ファイル用に設計されたメモ アプリである Nota も作成しています。