转换html中的相对地址(链接 javascript 图像和表单提交地址)成绝对地址

这几天想将html中的相对地址转换成绝对地址,于是上网google了一下,找到了几个php的转换函数,发现处理得不是很完美,有些不能够处理链接中没有引号的url,有些将#开头的也转换成绝对地址,于是自己开始修改,研究了preg_replace函数和php正则表达式,得到下面的转换代码,分享下,希望能够帮助到大家。

以下代码将html中的相对地址转换成绝对地址,使用到了php正则表达式和preg_replace,可以将html中的链接, 图像, javascript和表单提交地址全部转换成绝对地址(除了以#开头的链接,因为是html内部自己的链接,就没有做绝对地址处理),都通过了测试,有什么问题可以在评论中反映。

<?php
function real_url($url,$URI) {   
    $URI_PARTS = parse_url($URI);
    $pnum = substr_count($url,"../");
    if(substr($url,0,1) == "/") $url =
      preg_replace("`(.+://.+?)/.*`","$1$url",$URI);
    if($pnum>0) {   
        for($i=0;$i< ($pnum+1);$i++) {   
            $URI = dirname($URI);   
        }   
        $url = str_replace("../","",$url);   
        $url = $URI."/".$url;   
    }
    else
    {
      if(substr_count($url,":")<1)
      {
        if($url==".")
          $url=$URI;
        else
          $url=dirname($URI).‘/‘.$url;
      }
    }
    //将./替换成空
    $url = str_replace("./","",$url);
    return $url;
}
 
function RelativeURLToAbsoulteURL($html,$URI)
{
//将\’,\",",’引号的链接,改成双引号
    $html=preg_replace("~(<[^>]*)(src|href|action)=(\"|\\\\\"|’|\\\\‘)([^\s]+)(\"|\\\\\"|’|\\\\‘)~Uis","$1$2=\"$4\"",$html);
//将没有加引号的链接,加上双引号
    $html=preg_replace("~(<[^>]*)(src|href|action)=([^\"]+)([\s|>])~Uis","$1$2=\"$3\"$4",$html);
 
//处理相对地址处理成绝对地址,并且可以处理#,..,.类型的地址
    $html=preg_replace("~(<[^>]*)(src|href|action)=\"([^#][^:]*)\"~Uise","‘$1$2=\"‘.real_url(’$3′,’$URI‘).’\"‘",$html);
    return $html;
}
 
//测试
$URI="http://www.convertzone.com/1/2/3/4/test.htm";
$html=‘
<a href="http://www.google.com/help.htm">other website</a>
<a href=/>home</a>
<a href=/index.htm>index</a>
<a href="../../index.htm">two</a>
<a href=\’.././index.htm\’>three</a>
<a href=#bookmark>test bookmark</a>
<a href=../../../index.htm#bookmark>one bookmark</a>
‘;
$result=RelativeURLToAbsoulteURL($html,$URI);
 
echo $result;
?>


原文:http://www.flyaga.info/php-develop/convert-relative-url-to-absoulte-url.htm
300*300
 文章首页关于迷茫时代关于我写意人生
版权所有:迷茫时代 All rights reserved   
执行时间:0.00443 秒