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://如果有则不用加,如果没有则必须加上。应该怎么做?
得到的效果是:红框里的是不同 展开
不能确定img标签的位置,也不能确定img标签中src的位置,而且我要做的是,只要是img标签就要给他的src加上http://如果有则不用加,如果没有则必须加上。应该怎么做?
得到的效果是:红框里的是不同 展开
3个回答
展开全部
你看看这个吧:
<?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);
?>
<?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(你的字符串即可);
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个用前台的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;
}
对代码有什么不懂的,可以问我
如果非要 用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;
}
对代码有什么不懂的,可以问我
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
$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);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |