在 markdown 的场景中,经常会用到 markdown 和 html 的互转。 laravel 这边怎么处理呢。要做哪些呢。
- 要做到互转。
- 要防止 xss 注入。
操作一波
互转用到: https://github.com/thephpleague/html-to-markdown
https://github.com/erusev/parsedown
防止 xss 注入用到:https://github.com/mewebstudio/Purifier
我们先安装
composer require mews/purifier
php artisan vendor:publish --provider="Mews\Purifier\PurifierServiceProvider"
composer require league/html-to-markdown
这里,我们使用 trait 的方式来处理。
<?php
namespace App\Traits;
use League\HTMLToMarkdown\HtmlConverter;
use Parsedown;
use Purifier;
trait Markdown
{
/**
* markdown -> html
* @param $markdown
* @return mixed
*/
protected function markdownToHtml($markdown)
{
// markdown to html
$convertedHmtl = app(Parsedown::class)->setBreaksEnabled(true)->text($markdown);
/** XSS 防注入 */
$convertedHmtl = Purifier::clean($convertedHmtl, 'markdown');
// 代码高亮展示优化
$convertedHmtl = str_replace("<pre><code>", '<pre><code class=" language-php">', $convertedHmtl);
return $convertedHmtl;
}
/**
* html -> markdown;
* @param $html
* @return string
*/
protected function htmlToMarkdown($html)
{
$converter = new HtmlConverter(['header_style' => 'atx']);
$converter->getConfig()->setOption('list_item_style', '*');
return $converter->convert($html);
}
}
使用
use App\Traits\Markdown;
use Markdown;
$this->markdownToHtml('xxxx');