把字符串中地址全部获取到一个数组我们利用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