Zao’s Blog
感谢上天,我不是一个人在战斗!
炒股开户,证券网上开户,不限资金佣金万1.5包含规费,量大手续费万1.3,QQ 860100868

网上找了好几个用于php的将链接相对路径转换为绝对路径的方法,发现都不能考虑周全,有些非一般的链接写法并不能成功转换,比如“"”、“'”、“./”、“../”等。修改并测试成功后放出来大家共享,如果有bug的话欢迎纠正。

  1. <?php 
  2. /*相对路径转为绝对路径的方法*/
  3. function RealUrl($subject_url,$replace_url) //$subject_url为要转换的页面(包含文件名)
  4. {
  5.     $urls = parse_url($subject_url);
  6.     $pnum = substr_count($replace_url,'../');
  7.     $isabs = strpos($replace_url,'://');
  8.     if($isabs && $isabs<6)
  9.         return $replace_url;
  10.     else if(substr($replace_url,0,1) == '/')
  11.         $replace_url = 'http://'.$urls['host'].$replace_url;
  12.     else if(substr($replace_url,0,2) == './')
  13.         $replace_url = dirname($subject_url).substr($replace_url,1);
  14.     else if($pnum>0)
  15.     {
  16.         for($i=0;$i<($pnum+1);$i++)
  17.         {
  18.             $subject_url = dirname($subject_url);
  19.         }
  20.         $replace_url = str_replace('../','',$replace_url);
  21.         $replace_url = $subject_url.'/'.$replace_url;
  22.     }
  23.     else
  24.         $replace_url = dirname($subject_url).'/'.$replace_url;
  25.     return $replace_url;
  26. }
  27.  
  28. /*调用上一个函数,将网页代码的链接转换为绝对路径*/
  29. function RealUrlCode($subject_url,$code) {
  30.     $patterns = array("/(<a\s+.*href=[\"|']?)([^>\"'\s]+?)(\s*[^>]*>)/iesU",
  31.                     "/(<img\s+.*src=[\"|']?)([^>\"'\s]+?)(\s*[^>]*>)/iesU");
  32.     $replace = "'\$1'.RealUrl('$subject_url','\$2').'\$3'";
  33.     $new_code = preg_replace($patterns, $replace, $code);
  34.     $new_code = stripslashes($new_code);
  35.     return $new_code;
  36. }
  37. /*例子*/
  38.  
  39. echo RealUrlCode('页面地址','页面内容'); //打印转换后的页面内容
  40. ?>

补充:php自带的用于本地文件相对路径转换绝对路径的函数是realpath (),但函数要求文件必需存在。

3 条评论 | 发表你的评论

还是有点问题,你试着匹配一下这个字符串:
src='upload/ime.asp'
后面的那个src='upload/ime.asp'被匹配了,而中间的那个没有被匹配。

受用!感谢!

找了两天,试用了,不过感觉有点慢

发表评论





改变评论框高度:增大(+) | 减小(-)

DO NOT Fill!