php中正则匹配img标签,并且替换了。

$string='asdfsdfsdfsdf<imgsrc="http://www.baidu.com/index.php/aaaa.jpg"border='1px;'/... $string = 'asdfsdfsdfsdf<img src="http://www.baidu.com/index.php/aaaa.jpg" border='1px;' />sdfsdfdsfdsfdasfdasff<img height='100px' src="www.baidu.com/index.php/aaaa.jpg"/>sadfsdfdfdsf<link src="a.css"/>sfsdafasdfadsfadf';

不能确定img标签的位置,也不能确定img标签中src的位置,而且我要做的是,只要是img标签就要给他的src加上http://如果有则不用加,如果没有则必须加上。应该怎么做?
得到的效果是:红框里的是不同
展开
 我来答
百度网友0f37e23c0
推荐于2016-07-09 · TA获得超过1543个赞
知道大有可为答主
回答量:1070
采纳率:50%
帮助的人:1279万
展开全部
你看看这个吧:
<?php

function change_str($string)
{
preg_match_all('|(.*)src="(.*)"(.*)|isU',$string,$main);
$newstring = "";
foreach($main[1] as $key => $value )
{
$newstring .= $value;
if (strpos($main[2][$key],".jpg") or strpos($main[2][$key],".gif") )
{
if ( strpos($main[2][$key],"http://") === false )
$main[2][$key] = "http://".$main[2][$key];
}
$newstring .= 'src="'.$main[2][$key].'"';
$newstring .= $main[3][$key];
}
return $newstring;
}

$mystr = "";//你的字符串;
echo change_str($mystr);

?>
追问

结果好像和$new = preg_replace("/<img(.*?)src=\"(?!http:)(.+?)\"/", "<img\\1src=\"http://\\2\";", $string);结果是一样的。

我要的结果如图,红框里是不同的地方。只是加上一http://

追答
我给你写了个 function,你直接调用即可,我测试过,正确的。

你调用

change_str(你的字符串即可);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8dce392c02
2013-03-21 · TA获得超过1099个赞
知道小有建树答主
回答量:587
采纳率:66%
帮助的人:307万
展开全部
这个用前台的js+dom处理 比较合适
如果非要 用php处理 也可以 只是比较麻烦
function add_http($string){
$a=preg_match_all('/<img.*?>/i',$string,$img_arr);
if(!$a){exit;}
foreach($img_arr[0] as $img){
$b=preg_match('/src\s*?=.*?(\'|").*?(\'|")/i',$img,$url);
if(!$b){continue;}
$url=str_ireplace(' ','',$url[0]);
$url=str_ireplace('src=','',$url);
$url=str_ireplace('"','',$url);
$url=str_ireplace("'",'',$url);
$url_re=str_ireplace('http://','',$url);
$img_url=str_ireplace($url,'http://'.$url_re,$img);
$string=str_ireplace($img,$img_url,$string);
}
return $string;
}
对代码有什么不懂的,可以问我
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
novice_pegasus
2013-03-21 · TA获得超过624个赞
知道小有建树答主
回答量:722
采纳率:100%
帮助的人:638万
展开全部
$new = preg_replace("/<img(.*?)src=\"(?!http:)(.+?)\"/", "<img\\1src=\"http://\\2\"", $string);
追问
这个是匹配了,但是我想要的效果是 把http://给src加上后把原文中的给变了,而不是只需要匹配的那个值。我只是要给那个src加上http:// 而其他的不变。
追答
$string = preg_replace("/<img(.*?)src=\"(?!http:)(.+?)\"/", "<img\\1src=\"http://\\2\"", $string);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式