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

Home > PHP开发 | 371 views 十二月 29th, 2008 convert href src action relative url to absoulte url , php正则表达式 , 相对地址转换成绝对地址 , 转换相对地址(链接 javascript 图像和表单提交地址)成绝对地址

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

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

  1. <?php
  2. function   real_url ( $url , $URI ) {    
  3.     $URI_PARTS = parse_url ( $URI ) ;
  4.     $pnum = substr_count ( $url , " ../ " ) ;
  5.     if ( substr ( $url , 0 , 1 ) == " / " )   $url =
  6.       preg_replace ( " `(.+://.+?)/.*` " , " $1 $url " , $URI ) ;
  7.     if ( $pnum > 0 )   {    
  8.         for ( $i = 0 ; $i < ( $pnum + 1 ) ; $i ++ )   {    
  9.             $URI = dirname ( $URI ) ;   
  10.         }    
  11.         $url = str_replace ( " ../ " , "" , $url ) ;   
  12.         $url = $URI . " / " . $url ;   
  13.     }
  14.     else
  15.     {
  16.       if ( substr_count ( $url , " : " ) < 1 )
  17.       {
  18.         if ( $url == " . " )
  19.           $url = $URI ;
  20.         else
  21.           $url = dirname ( $URI ) . / . $url ;
  22.       }
  23.     }
  24.     //将./替换成空
  25.     $url = str_replace ( " ./ " , "" , $url ) ;
  26.     return   $url ;
  27. }
  28.  
  29. function   RelativeURLToAbsoulteURL ( $html , $URI )
  30. {
  31. //将/’,/",",’引号的链接,改成双引号
  32.     $html = preg_replace ( " ~(<[^>]*)(src|href|action)=( /" | /" |’| ‘)([^/s]+)( /" | /" |’| ‘)~Uis " , " $1$2= /" $4 /" " , $html ) ;
  33. //将没有加引号的链接,加上双引号
  34.     $html = preg_replace ( " ~(<[^>]*)(src|href|action)=([^ /" ]+)([/s|>])~Uis " , " $1$2= /" $3 /" $4 " , $html ) ;
  35.  
  36. //处理相对地址处理成绝对地址,并且可以处理#,..,.类型的地址
  37.     $html = preg_replace ( " ~(<[^>]*)(src|href|action)= /" ([^#][^:]*) /" ~Uise " , " ‘$1$2= /" ‘.real_url(’$3′,’ $URI ‘).’ /" " , $html ) ;
  38.     return   $html ;
  39. }
  40.  
  41. //测试
  42. $URI = " http://www.convertzone.com/1/2/3/4/test.htm " ;
  43. $html =
  44. <a href="http://www.google.com/help.htm">other website</a>
  45. <a href=/>home</a>
  46. <a href=/index.htm>index</a>
  47. <a href="../../index.htm">two</a>
  48. <a href= /’ .././index.htm /’ >three</a>
  49. <a href=#bookmark>test bookmark</a>
  50. <a href=../../../index.htm#bookmark>one bookmark</a>
  51. ;
  52. $result = RelativeURLToAbsoulteURL ( $html , $URI ) ;
  53.  
  54. echo   $result ;
  55. ?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值