把字符串中地址全部获取到一个数组我们利用preg_match_all函数

代码如下 复制代码
<?php
$str='<p><img border="0" src="upfiles/2009/07/1246430143_1.jpg" alt=""/></p>';
$pattern="/<[img|IMG].*?src=['|"](.*?(?:[.gif|.jpg]))['|"].*?[/]?>/";
preg_match_all($pattern,$str,$match);print_r($match);
?>

结果

Array
(
[0] => Array
(
[0] => <img border="0" src="upfiles/2009/07/1246430143_1.jpg" alt=""/>
)
[1] => Array
(
[0] => upfiles/2009/07/1246430143_1.jpg
)
)

有了上面核心函数下面就好做了

代码如下 复制代码
/**
* 获取替换文章中的图片路径
* @param string $xstr 内容
* @param string $keyword 创建照片的文件名
* @param string $oriweb 网址
* @return string
*
*/
function replaceimg($xstr,$keyword, $oriweb){

//保存路径
$d = date('Ymd', time());
$dirslsitss = '/var/www/weblist/uploads/'.$keyword.'/'.$d;//分类是否存在
if(www.111cn.net)(!is_dir($dirslsitss)) {
@mkdir($dirslsitss, 0777);
}

//匹配图片的src
preg_match_all('#<img.*?src="([^"]*)"[^>]*>#i', $xstr, $match);

foreach($match[1] as $imgurl){

$imgurl = $imgurl;

if(is_int(strpos($imgurl, 'http'))){
$arcurl = $imgurl;
} else {
$arcurl = $oriweb.$imgurl;
}
$img=file_get_contents($arcurl);

if(!empty($img)) {

//保存图片到服务器
$fileimgname = time()."-".rand(1000,9999).".jpg";
$filecachs=$dirslsitss."/".$fileimgname;
$fanhuistr = file_put_contents( $filecachs, $img );
$saveimgfile = "/uploads/$keyword"."/".$d."/".$fileimgname;

$xstr=str_replace($imgurl,$saveimgfile,$xstr);
}
}
return $xstr;
}

from:http://www.111cn.net/phper/php-cy/48607.htm

php把采集内容中图片地址下载并替换成本地地址的更多相关文章

  1. Java学习笔记——IO操作之以图片地址下载图片

    以图片地址下载图片 读取给定图片文件的内容,用FileInputStream public static byte[] mReaderPicture(String filePath) { byte[] ...

  2. PHP限制HTML内容中图片必须是本站的方法

    本文实例讲述了PHP限制HTML内容中图片必须是本站的方法.分享给大家供大家参考.具体实现方法如下: 1. PHP代码如下: <?php $dom = new DOMDocument; $dom ...

  3. sed 's/AA/BB/' file # 将文件中的AA替换成BB,只替换一行中第一次出现的AA,替换后的结果输出到屏幕 sed 's/AA/BB/g' file # 将文件中的所有AA都替换成BB,替换后的结果输出到屏幕

    生信人的自我修养:Linux命令速查手册 简佐义 ​ 四川大学 生物信息学硕士 科学求真 赢 10 万奖金 · 院士面对面 209 人赞同了该文章 许多人做生物信息学,要么不重视Linux,要么不知道 ...

  4. 请实现一个函数,把字符串中的每一个空格替换成“%20”,比如输入 “We are Happly。” 则输出“we%20are%20happy。”

    请实现一个函数,把字符串中的每一个空格替换成"%20",比如输入 "We are Happly."  则输出"we%20are%20happy. &q ...

  5. 【c语言】字符串替换空格:请实现一个函数,把字符串中的每一个空格替换成“%20”

    // 字符串替换空格:请实现一个函数,把字符串中的每一个空格替换成"%20". // 比如输入"we are happy.",则输出"we%20are ...

  6. dede 采集文章内容中图片不显示的问题

    找到include文件下面的dedecollection.class.php 找到DownMedias这个方法,大概在870行 //下载标记里的图片和flash $okurl = $this-> ...

  7. 为CKEDITOR内容中图片加上 图片服务器路径

    做网站的时候,前台和后台是分开的, 用了CKEDITOR上传图片,但是发现内容带图片的时候,前台Web浏览的时候是一个红X,一看路径不对,上传的到数据库中的是相对的虚拟路径,例如:<img al ...

  8. C#之通过图片地址下载图片

    因为项目上需要加载在线卫星云图,因此写了这个功能来把卫星云图下载的本地,在这里记录一下: string imageUrl=“http://image.nmc.cn/product/2018/08/06 ...

  9. java中图片地址base64编码的相互转换

    public class Base64Url { /** * 将base64编码字符串转换为图片 * @param imgStr: base64编码字符串 * @param path: 图片路径-具体 ...

随机推荐

  1. 基于redis分布式缓存实现(新浪微博案例)转

    第一:Redis 是什么? Redis是基于内存.可持久化的日志型.Key-Value数据库 高性能存储系统,并提供多种语言的API. 第二:出现背景 数据结构(Data Structure)需求越来 ...

  2. 【DB】MYSQL相关细节

    在进行统计API模块测试时候,需要用SQL进行查询,并和API的返回结果进行对比: 而SQL中一些以前用过的细节需要记住: 补充一下show的部分用法: MySQL中有很多的基本命令,show命令也是 ...

  3. vsphere脚本等

  4. Linq中的连接(join)

    http://www.cnblogs.com/scottckt/archive/2010/08/11/1797716.html Linq中连接主要有组连接.内连接.左外连接.交叉连接四种.各个用法如下 ...

  5. vue循环中的v-show

    v-show如果使用循环对象的属性来时控制, 这个属性必须是加载时就存在的 <div class="list-group col-sm-12" v-for="(is ...

  6. java 加密

    加密.大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密. 双向加密大体意思就是明文加密后形成密文,能够通过算法还原成明文. 单向加密仅仅是对信息进行了摘要计算,不能通过算法生成明文. ...

  7. Java ConcurrentHashMap (Java代码实战-005)

    package Threads; import com.google.common.collect.Maps; import java.util.concurrent.ConcurrentMap; i ...

  8. iOS变量定义在 .h 还是 .m 中

    前言 曾经我定义变量一直都是定义在.h文件里.后来看别人的代码,发现非常多人都把一些变量定 义在.m文件里. 后来我自己试了一把,发现变量既能够定义在.h文件里也能够定义在.m文 件中,尽管这是个非常 ...

  9. C++11中的mutex, lock,condition variable实现分析

    本文分析的是llvm libc++的实现:http://libcxx.llvm.org/ C++11中的各种mutex, lock对象,实际上都是对posix的mutex,condition的封装.不 ...

  10. Java循环中标签的作用(转)

    转自:http://lihengzkj.iteye.com/blog/1090034 以前不知道在循环中可以使用标签.最近遇到后,举得还是有其独特的用处的.我这么说的意思是说标签在循环中可以改变循环执 ...