HTML 与 Markdown 互相转换

引入以下工具进行 markdown 与 html 之间的转换.

  1. league/html-to-markdown
  2. erusev/parsedown

App\Http\Controllers\Traits\Markdown.php;

<?php
/**
 * Created by PhpStorm.
 * User: GucciLee
 * Date: 2019/3/4
 * Time: 14:41
 */

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);
    }
}

其中有用到 XSS 防注入, 参考文章:
XSS 安全漏洞 - HTMLPurifier

App\Http\Controllers\ArticlesController.php

<?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'));
    }
    .
    .
    .
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
老哥以后是要做 CTO 的人,这些技术怎么能不会呢?
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1

请问 trait 的 markdownToHtml 方法中的 clean 方法是哪儿来的 ?

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!