MarkdownをPHPでパースする(Parsedown利用)
こんにちは、株式会社ライオンハートの鵜飼です。
少し前にクライアントサイド側でMarkdownのパースを行うメモを残しておりましたが、今回は毎回クライアントサイドでパースを行うのは勿体無いので、サーバサイド側、PHPでパースを行う際のメモです。
ライブラリ選定
PHPのMarkdownパーサはPHP Markdownが一番有名でしょうか?また、同作者のMarkdownを拡張したPHP Markdown Extraというのもあるそうですね。
今回は、またもや高速で動作すると紹介されているParsedownを採用してみました。
その他PHPのMarkdownパーサ
インストール
最近のライブラリはComposerでインストール出来るようになってるので、インストールも楽ちんです。
composer require erusev/parsedown
本番環境もcomposer.json
だけ持って行って、composer install
を実行する流れでも良いかもしれませんね。
使い方
Markdownのパーサのみのライブラリなので、使い方も簡単です。
単純にパースするだけであれば、下記のように一行で実行できます。
<?php echo Parsedown::instance()->text('# heading');
他にはnewでインスタンスを作成する方法でもOKです。
<?php $parse = new Parsedown(); echo $parse->text( '# heading' );
設定出来るオプションは3つだけです。
改行を<br>
に変換するsetBreaksEnabled
<?php echo Parsedown::instance() ->setBreaksEnabled( true ) ->text("1行目 \n 2行目"); // <p>1行目<br />2行目</p>
Markdown中のHTMLをエスケープするsetMarkupEscaped
<?php echo Parsedown::instance() ->setMarkupEscaped( true ) ->text("<div>このHTMLはエスケープされます</div>"); // <p><div><このHTMLはエスケープされます</div><</p>
URLを自動的にリンクテキストにするsetUrlsLinked
このオプションだけは初期値がtrue
です。
<?php echo Parsedown::instance() ->text("これはリンクが貼られます http://example.com/"); // <p>これはリンクが貼られます <a href="http://example.com/">http://example.com/</a></p> echo Parsedown::instance() ->setUrlsLinked( false ) ->text("これはリンクが貼られません http://example.com/"); // <p>これはリンクが貼られません http://example.com/</p>
拡張
拡張する際は、Parsedownを継承して書く形になります。
あまり詳しくは記述しませんが、例えば特定のMarkdownの記法を無効化する際はメソッドをオーバライドしてしまえば良いようです。
<?php class MyParser extends Parsedown { protected function blockHeader($Line) { return; } }
詳しくは公式のWikiを参照ください。