相对地址和绝对地址的正则问题

aotujsp 2010-11-30 05:27:37

function cleanLinksImages($str, $prefix){
$reg='/(<[^>]*)(src|href)+[ ]*=[ ]*(\"|\')[(\.+|\/)]+(.*)(\"|\')(.*?)/i';
$s0=$str;
while(preg_match($reg,$s0)){
$s0=preg_replace($reg,"$1 $2=$3".$prefix."$4$5$6",$s0);
}
$reg0='/<img(.*?)(src)=\"(file:|[\w{1-3}]:).*?>/i';
$localFileFix0='/<a.*?href=\"(file:|[\w{1-3}]:).*?>(.*?)<\/a>/i';
$str = preg_replace($reg0,"",$s0);
$str = preg_replace($localFileFix0,'\2',$str);
return $str;
}


上面是我写的一个function,只要是想要把 某一个string里面的 <img>和<a> 标签中的link某些东西替换掉

function randStr($num){
$base=array('<img src="file:///a/b/c.jpg" alt="" />Image1<br />', //Image1<br />
'<img src="FIle:///a/ab/c.jpg" />Image2<br />', //Image2< br />
'<img src="c://a/ab/c.jpg" />Image3<br />', //Image3<br />
'<img src="a/ab/c.jpg" />Image4<br />',//<img src="$prefix/a/ab/c.jpg" />Image4<br />
'<img src="/a/b/c.jpg"/>Image5<br />',//<img src="$prefix/a/b/v.jpg" />Image5<br />
'<img src="../../../files/a/b/c.jpg" />Image6<br />',//<img src="$prefix/files/a/b/c.jpg" />Image6<br />
'<img src="http://www.justfindu.com/find.png" />Image7<br />',//<img src="http://www.justfindu.com/find.png" />Image7<br />
'<img src="file:a/b/c.jpg" />Image8<br />',//Image8<br />

'<a href="file://a/b/c.html">Link1</a><br />',
'<a href="FiLE://a/ab/c.html">Link2</a><br />',
'<a href="c://a/b/c.html">Link3</a><br />',
'<a href="a/b/c.html">Link4</a><br />',
'<a href="../../a/b/c.html">Link5</a><br />',
'<a href="/a/b/c.html">Link6</a><br />',
'<a href="http://www.abcd.com/a/b/c.html">Link7</a><br />',
'<a href="file:/a/b/c.html">Link8</a><br />',
);

$str='';
for($i=0;$i<$num;$i++){
$randNum=rand(0,time())%count($base)+1;
$str.=$base[$randNum];
}

return $str;
}

这个function为了随机的生成几个段的sample string组合,
$base这个变量的里面是string元素,后面的注释是运行第一个function之后变成的结果.注释中的 $prefix是需要替换的url
<a>标签也是一样的判断


$testString1='<div class="cnm">'.randStr(5).'</div>';
$prefix='http://www.ooo.com/';
echo 'Test 1:<br />';
echo 'Old:<textarea cols="50" rows="12">'.$testString1.'</textarea>';
echo 'Changed:<textarea cols="50" rows="12">'.cleanLinksImages($testString1,$prefix).'</textarea>';
echo '<br />';

$testString3='<table><tr><td>'.randStr(2).'</td><td>'.randStr(4).'</td></tr></table>';
echo 'Test 3:<br />';
echo 'Old:<textarea cols="50" rows="12">'.$testString3.'</textarea>';
echo 'Changed:<textarea cols="50" rows="12">'.cleanLinksImages($testString3,$prefix).'</textarea>';
echo '<br />';

这样出来的结果应该是所有的file:// c:/之类的去掉留text,相对地址变成http://www.ooo.com/*****,本来是http://***地址的不变


但是cleanLinksImages();有点问题

求解决,

问题是有些时候img标签这部分处理不好,而且会把后面部分东西一并删掉
...全文
127 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
codeyell-com 2010-12-02
  • 打赏
  • 举报
回复
太复杂,帮你顶

21,882

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧