免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1350 | 回复: 3
打印 上一主题 下一主题

[正则]请问我这样修复链接为什么出错? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-02 21:20 |只看该作者 |倒序浏览

  1. <?

  2. function fixPath($aim, $baseUrl)
  3. {
  4.                 $ar = parse_url(dirname($baseUrl).'/'.$aim);

  5.                 $s = $ar['path'];
  6.                 do {
  7.                   $t = preg_replace("|/[^/]+/\.\.|", '', $s);
  8.                   list($s,$t) = array($t,$s);
  9.                 }while($t != $s);
  10.                 $aim = 'http://'.$ar['host'].$s; //out http;//www.aaa.com/images/tt.jpg
  11.                 return $aim;
  12. }

  13. $Url = "http://www.it.com.cn/f/market/0512/2/206656.htm";
  14. $aim = "../../../../f/market/0512/2/nn20051202j1009.jpg";
  15. $rs = fixPath($aim, $Url);
  16. echo $rs;
  17. ?>

复制代码


结果居然返回:
http://www.it.com.cn/f/market/f/market/0512/2/nn20051202j1009.jpg

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
2 [报告]
发表于 2005-12-02 22:49 |只看该作者
看看这个,不知道是否完整,希望你多多测试一下子:
  1. <?php

  2. // --------------------------------------------------------------------------
  3. // File name   : 文件名称.php
  4. // Description : 文件说明
  5. // Requirement : PHP4 (http://www.php.net)
  6. //
  7. // Copyright(C), HonestQiao, 2005, All Rights Reserved.
  8. //
  9. // Author: HonestQiao (honestqiao@hotmail.com)
  10. //
  11. // --------------------------------------------------------------------------

  12. function fixPath($aim, $baseUrl)
  13. {
  14.         $strSource = $baseUrl;
  15.         if(preg_match_all('/([^:\\/]+)\//', $strSource, $aryResult1, PREG_PATTERN_ORDER)){
  16.                 /// baseUrl存在路径分隔符/,则获取其路径层次
  17.                 $intUrlLevel= count($aryResult1[0]);
  18.         }else
  19.         {
  20.                 /// baseUrl不存在路径分隔符/,则生成后面需要的数据
  21.                 $intUrlLevel = 0;
  22.                 preg_match_all('/http:\/\/(.+?)$/', $strSource, $aryResult1, PREG_PATTERN_ORDER);
  23.                 $aryResult1[0][0] = $aryResult1[1][0] . "/";
  24.         }

  25.         $strSource = $aim;
  26.         if(preg_match_all("/^\//",$strSource, $aryResult2, PREG_PATTERN_ORDER)){
  27.                 /// aim以/开头,则为根目录路径
  28.                 $strAimUrl = "http://" . $aryResult1[1][0] . str_replace("../","",$aim);
  29.         }else{
  30.                 /// 分析aim的../,即相对路径的层次
  31.                 preg_match_all('/(\\.\\.\/)/', $strSource, $aryResult2, PREG_PATTERN_ORDER);
  32.                 $intAimUrlLevel= count($aryResult2[0]);
  33.                 /// 获取aim的相对路径的层次
  34.                 if($intUrlLevel<=$intAimUrlLevel){
  35.                         /// baseUrl的路径层次小于aim的相对路径的层次,则从根目录开始
  36.                         $strAimUrl = "http://" . $aryResult1[0][0] . str_replace("../","",$aim);
  37.                 }else{
  38.                         /// baseUrl的路径层次大于aim的相对路径的层次,则生成大于部分的路径
  39.                         $strAimUrl = "http://" . implode("",array_slice ($aryResult1[0], 0, $intUrlLevel - $intAimUrlLevel)) . str_replace("../","",$aim);
  40.                 }
  41.         }
  42.         return $strAimUrl;
  43. }

  44. $Url = "http://www.it.com.cn/f/market/0512/2/206656.htm";
  45. $aim = "../../../../f/market/0512/2/nn20051202j1009.jpg";

  46. echo(fixPath($aim,$Url));

  47. ?>
复制代码

论坛徽章:
0
3 [报告]
发表于 2005-12-02 23:05 |只看该作者
好的,谢谢老大,我初步测试没有问题。

论坛徽章:
0
4 [报告]
发表于 2005-12-03 15:45 |只看该作者
  1. <?

  2. function fixPath($aim, $baseUrl)
  3. {
  4.                 $ar = parse_url(dirname($baseUrl).'/'.$aim);

  5.                 $s = $ar['path'];
  6.                 do {
  7.                   $t = preg_replace("|/[^/\.]+/\.\.|", "", $s);
  8.                   list($s,$t) = array($t,$s);
  9.                 }while($t != $s);
  10.                 $aim = 'http://'.$ar['host'].$s; //out http;//www.aaa.com/images/tt.jpg
  11.                 return $aim;
  12. }

  13. $Url = "http://www.it.com.cn/f/market/0512/2/206656.htm";
  14. $aim = "../../../../f/market/0512/2/nn20051202j1009.jpg";
  15. $rs = fixPath($aim, $Url);
  16. echo $rs;
  17. ?>
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP