首页> 实战笔录 >PHP开发笔记 >PHP PHP

PHP分别替换内容中的img标签src的值

作者:小萝卜 2019-11-20 浏览 1028

简介最近弄了个小的采集功能,然后遇到了这个问题。需求是这样子,当我采集到内容主题后我需要把内容里面的图片下载到本地,问题点怎么内容中的图片依次替换成我本地的图片路径了?

PHP分别替换内容中的img标签src的值

最近弄了个小的采集功能,然后遇到了这个问题。
需求是这样子,当我采集到内容主题后我需要把内容里面的图片下载到本地,问题点怎么内容中的图片依次替换成我本地的图片路径了?

我是这么操作的,先把图片下载到本地:

        $arr = array();

        //循环下载图片
        for ($k=0; $k <count($photo) ; $k++) { 
            $url = $photo[$k]['src'];
            if($url!=''){
                //$url = str_replace('//', 'https://', $url);                    
                $res = getImage($url,ROOT_PATH.'uploads'.DS.'gather'.DS.$pid,'',0); //下载图片                
                if($res['error']==0){
                    $arr[$k] = '/uploads/gather/'.$pid.'/'.$res['file_name'];
                }else{
                    $arr[$k] = $url;
                }
            }
           
        }

然后通过php的内置函数preg_replace_callback去依次替换内容中的图片地址:

          if(!empty($arr)){

            for ($i=0; $i < count($arr) ; $i++) { 
                //循环替换图片
                $newContent =  preg_replace_callback(
                                '#<img(.+?)src="([^"]+?)"([^>]*?)>#', 
                                function($m) use($i,$arr){
                                    if($arr[$i]){
                                        //替换图片
                                        return "<img src=\"$arr[$i]\">";
                                    }else{
                                        //没下载到图片 不替换
                                        return "<img src=\"$m[2]\">";
                                    }

                                }, 
                                $zdata['bodys'] //这个是内容主体
                            );
            }

$newContent就是替换后的内容主体了,大家可以打印看下。

官方手册:http://php.net/manual/zh/function.preg-replace-callback.php 

很赞哦! (0)

文章评论

    高端网站建设