Write the Code. Change the World.

11月 12

在 markdown 的场景中,经常会用到 markdown 和 html 的互转。 laravel 这边怎么处理呢。要做哪些呢。

  1. 要做到互转。
  2. 要防止 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');

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注