laravel 中引入markdown,html处理插件

1.Purifier:过滤不良的代码插件

composer 中引入 ,git地址

"mews/purifier": "~2.0"
php artisan vendor:publish --provider="Mews\Purifier\PurifierServiceProvider"

2.引入html转markdown插件,git地址

"league/html-to-markdown": "^4.2",

3.引入markdown转html插件,git地址 官网地址

"erusev/parsedown": "^1.6",

4.测试代码

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Services\Mention;
use Parsedown;
use League\HTMLToMarkdown\HtmlConverter;
use Purifier;

class Test extends Controller
{
protected $htmlParser;
    protected $markdownParser;

    public function __construct()
    {
        $this->htmlParser = new HtmlConverter([‘header_style‘ => ‘atx‘]);
        $this->markdownParser = new Parsedown();
    }

    public function t2(Request $request)
    {
        $mention = new Mention();
        $content = $request->input(‘content‘);
        $markdownContent = $mention->parse($content);

        $htmlContent = $this->convertMarkdownToHtml($markdownContent);
        var_dump($htmlContent);exit;
    }

    public function convertHtmlToMarkdown($html)
    {
        return $this->htmlParser->convert($html);
    }

    public function convertMarkdownToHtml($markdown)
    {
        $convertedHmtl = $this->markdownParser->setBreaksEnabled(true)->text($markdown);
        $convertedHmtl = Purifier::clean($convertedHmtl, ‘user_topic_body‘);
        $convertedHmtl = str_replace("<pre><code>", ‘<pre><code class=" language-php">‘, $convertedHmtl);

        return $convertedHmtl;
    }

}

mention 类文件代码

<?php
namespace App\Services;

use App\Model\User;

class Mention
{
    public $body_parsed;
    public $users = [];
    public $usernames;
    public $body_original;

    public function getMentionedUsername()
    {
        preg_match_all("/(\S*)\@([^\r\n\s]*)/i", $this->body_original, $atlist_tmp);
        $usernames = [];
        foreach ($atlist_tmp[2] as $k=>$v) {
            if ($atlist_tmp[1][$k] || strlen($v) >25) {
                continue;
            }
            $usernames[] = $v;
        }
        return array_unique($usernames);
    }

    public function replace()
    {
        $this->body_parsed = $this->body_original;

        foreach ($this->users as $user) {
            $search = ‘@‘ . $user->name;
            //$place = ‘[‘.$search.‘](‘.route(‘users.show‘, $user->id).‘)‘;
            $place = ‘[‘.$search.‘](http://user?id=‘.$user->id.‘)‘;
            $this->body_parsed = str_replace($search, $place, $this->body_parsed);
        }
    }

    public function parse($body)
    {
        $this->body_original = $body;

        $this->usernames = $this->getMentionedUsername();
        count($this->usernames) > 0 && $this->users = User::whereIn(‘name‘, $this->usernames)->get();

        $this->replace();
        return $this->body_parsed;
    }
}
时间: 2024-10-13 09:16:47

laravel 中引入markdown,html处理插件的相关文章

laravel中引入composer安装在vendor中的第三方应用

一.安装第三方应用 方法一:使用命令行安装第三方(已phpword为例): composer require phpoffce/phpword ^v0.14.* 方法二: 修改主项目composer.json文件: require": { "php": ">=7.1.3", "fideloper/proxy": "~4.0", "laravel/framework": "5.6.*

laravel中实现短信发送验证码

前段时间想实现一个短信验证码的功能,但是卡了很长时间. 首先我用的是阿里云的短信服务业务,其首次接入流程如下: 在阿里云上开通短信服务后需要做的: 1,申请签名  2,申请模板   3,创建Accesskey ,值得说的是,可以通过阿里云提供的子用户进行Accesskey的创建,这样可以更安全  4,充值 laravel有很多的进行短信业务的扩展包,之前我用的是阿里大于,使用如下: 1,从终端或者命令进入您的项,运行:composer require iscms/alisms-for-larav

vue中引入.svg图标,使用iconfont图标库

阿里巴巴的iconfont是一个很好的图标库,海量的素材可以快速满足开发人员日常对图标的诉求,我们采用symbol引用,官方介绍 创建SvgIcon组件 <template> <svg :class="svgClass" aria-hidden="true"> <use :xlink:href="iconName"></use> </svg> </template> <

spring mvc框架中引入handlebars插件

本篇介绍引入spring mvc框架中引入handlebars.js插件最基本步骤 1.下载handlebars.js插件,并添加到项目中 2.下载handlebars依赖的jar包,添加到工程 红框中的是handlebars核心包,其他是handlebars依赖的工具包 3.在spring mvc配置文件springMvc-servlet.xml中添加handlebars视图解析器配置 1 <!-- VIEW RESOLVER --> 2 <bean id="handleba

vue中引入swiper插件

这里我们使用npm的方式安装swiper插件. 1.npm install vue-awesome-swiper --save 2.在main.js文件中引入文件 import Vue from 'vue' import VueAwesomeSwiper from 'vue-awesome-swiper' 3.然后注册全局的swiper Vue.use(VueAwesomeSwiper) 4.在模板中使用 //引入swiper.cssrequire('swiper/dist/css/swiper

Django 中使用 MarkDown 插件

目录 Django 使用 markdown 插件 1 将 markdown 转化为 html 2 使用 markdown 编辑框 Django 使用 markdown 插件 Python-Markdown 插件 安装 pip install markdown 1 将 markdown 转化为 html models from django.utils import timezone from django.db import models from django.contrib.auth.mod

jq中的表单验证插件------jquery.validate

今天我们来说一下表单验证,有人说我们在进行表单验证的时候使用正则来验证是非常麻烦的,现在我来给大家介绍一下表单验证的插件:jquery.validate.min.js 它是与jquery一起结合用来使用的,使用它是非常方便,只需写校验规则和错误字段即可. 我们常见的校验规则有以下几种: (1)required:true               必输字段(2)email:true                  必须输入正确格式的电子邮件(3)date:true               

SSH——Struts2中引入Spring

一,为什么要使用Spring 1,装配JavaBean 摒弃老旧的new方式,spring为我们提供了一种机制,使得创建javaBean以及设置javaBean属性的工作可以通过配置文件以及Spring框架本身来完成.这样,当某些地方需要改变时,修改Spring的配置文件即可.这个过程实际上就是Spring框架通过读取相应的配置文件中的内容,并根据这些配置自动装在javaBean对象,设置JavaBean的属性. 2,整合第三方框架. spring的设计理念就是尽可能整合第三方框架,使得这些被整

Laravel5.1 搭建简单的社区(六)--引入MarkDown

在github中搜索HyperDown,直接复制Parser.php的源代码,在App文件夹中创建一个新的目录 Markdown,在App/MarkDown中创建Parser.php,然后在顶部更改命名空间: namespace App\MarkDown; 到此就已经成功的引入Markdown了,现在我们创建一个Markdown类来方便我们使用: namespace App\MarkDown; class Markdown { protected $parser; /** * Markdown