美文网首页
php将富文本编辑器内的内容图片上传并替换

php将富文本编辑器内的内容图片上传并替换

作者: 最底层的技术渣 | 来源:发表于2020-10-03 21:54 被阅读0次

前言

内容经常会出现拷贝人家的,这个时候图片也是人家的,对要求较高的网站是非常不利网站后期发展的,所以这个时候一般会对图片进行过滤或者保存为自己的图片

方法一、上传至oss平台

/**
 * php 提取html中图片并替换
 */
//要替换的内容
//提取图片路径的src的正则表达式
$match_str = '/(<img([^>]*)\s*src=(\'|\")([^\'\"]+)(\'|\")|url.*\(https:.*=png\))/';
preg_match_all($match_str,$content,$matches);

if (!empty($matches)){
    $http_str= '/http.*(png|jpeg|jpg|gif|bmp)/';
    foreach ($matches[0] as $k=>$v){
      preg_match($http_str,$v,$http);
      if (!empty($http[0])){
          //去上传 获得上传后的链接
          $upload_url = "";
          $content= str_replace($http[0],$upload_url,$content);
      }
      //获得链接后替换

    }
}
echo $content;

方法二、使用类库

<?php
class Img
{
    //图片保存地址
    public static $path;

    public function __construct($path)
    {
        if (empty($path)) {
            return "图片保存路径地址不得为空";
        }
        self::$path = $path;
    }

    /**
     * 图片地址转换
     *
     * @param [type] $str (目前使用的是长文本形式,如果是url模式请把前三行注释打开)
     * @return void
     */
    public function imgTransform($str)
    {
        //以下注释的三行是针对url采集是处理的
        // $result = $this->read_url($str);
        // $result = str_replace("\"", "", $result);
        // $str = str_replace("\'", "", $result);
        preg_match_all('/<img\s+[^>]*src\s?=\s?[\'|"]([^\'|"]*)[\'|"]/i', $str, $matches);
        if (!empty($matches)) {
            $http_str = '/(http|https).*(png|jpeg|jpg|gif|wbmp)/';
            foreach ($matches[1] as $v) {
                preg_match($http_str, $v, $http);
                if (!empty($http[0])) {
                   //去上传 获得上传后的链接
                    $upload_url = '/' . $this->GrabImage($v);
                    $str = str_replace($http[0], $upload_url, $str);
                }
            }
        }
        return $str;
    }

    /**
     * 根据url下载图片至本地指定的路径
     *
     * @param [type] $url 是远程图片的完整URL地址,不能为空。
     * @param string $filename 是可选变量: 如果为空,本地文件名将基于时间和日期 
     * @return void
     */

    public function GrabImage($url, $filename = '')
    {
        if ($url == "") : return false;
        endif;
        //若文件不存在,则创建; 
        if (!file_exists(self::$path)) {
            $this->mkDirs(self::$path);
        }

        if ($filename == "") {
            $ext = strrchr($url, ".");
            if ($ext != ".gif" && $ext != ".jpg" && $ext != ".jpeg" && $ext != ".png"  && $ext != ".wbmp") : return false;
            endif;
            $filename = self::$path . date("dHis") . mt_rand(0, 9) . $ext;
        }
        ob_start();
        readfile($url);
        $img = ob_get_contents();
        ob_end_clean();
        $size = strlen($img);
        $fp2 = @fopen($filename, "a");
        fwrite($fp2, $img);
        fclose($fp2);
        return $filename;
    }

    private function read_url($str)
    {
        $result = '';
        $file = fopen($str, "r");
        while (!feof($file)) {
            $result .= fgets($file, 9999);
        }
        fclose($file);
        return $result;
    }

    private function mkDirs($dir)
    {
        if (!is_dir($dir)) {
            if (!$this->mkDirs(dirname($dir))) {
                return false;
            }
            if (!mkdir($dir, 0777)) {
                return false;
            }
        }
        return true;
    }
}

相关文章

网友评论

      本文标题:php将富文本编辑器内的内容图片上传并替换

      本文链接:https://www.haomeiwen.com/subject/stkguktx.html