php关于文章中本地上传图片,和网络图片,如何正确的区分并显示他们

john4047
  • 184

在php中,一篇文章中的内容,可能会从本地上传图片,或者引用网络图片。
上传图片呢,文章内容保存在数据库中,就只是这个图片的路径,例如:

<img src="/data/images/2017/09/26/20170926141255_51116.png">

如果是引用网络图片呢,保存在数据库中是完整的链接,例如:

<img src="http://images2015.cnblogs.com/blog/782095/201510/782095-20151008152329596-1587178049.png">

那么根据文章ID,去显示这篇文章时候,对于上传图片的正确显示处理目前有了,如下

    $pattern="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg|\.png]))[\'|\"].*?[\/]?>/";
    preg_match_all($pattern,$content,$matches);

    $img = "";
    if(!empty($matches)) {
       //src的值是放在数组的第1个
        $img = $matches[1];
    }else {
        $img = "";
    }
    if (!empty($img)) {
        $img_url = $_SERVER['REQUEST_SCHEME'] . "://" . $_SERVER['HTTP_HOST'];

        $patterns= array();
        $replacements = array();

        foreach($img as $imgItem){

            $final_imgUrl = $img_url.$imgItem;
            $replacements[] = $final_imgUrl;

            $img_new = "/".preg_replace("/\//i","\/",$imgItem)."/";
            $patterns[] = $img_new;
        }
    }
    //让数组按照key来排序
    ksort($patterns);
    ksort($replacements);

    //替换内容
    $vote_content = preg_replace($patterns, $replacements, $content);

这样就可以让上传图片,正确显示出来,那么请问一下,如何在这其中,屏蔽掉是网络引用的图片呢??
因为网络图片已经有完整的链接地址了。

谢谢,不胜感激

回复
阅读 2.1k
2 个回答
✓ 已被采纳

第一个方法就是直接修改你的正则表达式,将src中http开头的都过滤掉。
或者在 foreach($img as $imgItem) 中判断 $img 是以http:// 或者https://开头的就不处理呗

可以在表中增加一个标识性字段,例如:from_type等等,根据这个字段来判断图片来源。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏