html和markdown互转

来源:learnku.com 时间:2021-09-10 02:40
使用
  1. league/html-to-markdown ,
  2. erusev/parsedown
  3. HTML Purifier
<?php
namespace App\Http\Controllers\Traits;

use League\HTMLToMarkdown\HtmlConverter;

trait Markdown
{
    /**
     * markdown -> html
     * @param $markdown
     * @return mixed
     */
    public function markdownToHtml($markdown)
    {
        // markdown to html
        $convertedHmtl = app('Parsedown')->setBreaksEnabled(true)->text($markdown);

        /** XSS 防注入 */
        $convertedHmtl = clean($convertedHmtl, 'markdown');

        // 代码高亮展示优化
        $convertedHmtl = str_replace("<pre><code>", '<pre><code class=" language-php">', $convertedHmtl);

        // 移除 {{}}
        // $convertedHmtl = remove_vue($convertedHmtl);

        // 返回 html
        return $convertedHmtl;
    }

    /**
     * html -> markdown;
     * @param $html
     * @return string
     */
    public function htmlToMarkdown($html)
    {
        $converter = new HtmlConverter(['header_style' => 'atx']);

        $converter->getConfig()->setOption('list_item_style', '*');

        return $converter->convert($html);
    }
}

 

<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Traits\Markdown;

class ArticlesController extends Controller{
    use Markdown;
 
    public function show(Article $article)
    {
        // 转换markdown
        $article->body = $this->markdownToHtml($article->body);

        return view('pages.articles.show', compact('article'));
    }
    
}