2010-02-08 35 views
3

我解析网页上找到的链接,和我正在寻找一种方式来URL转换是这样的:URL解析和简化在PHP

http://www.site.com/./eng/.././disclaimer/index.htm 

等效和更正确的

http://www.site.com/disclaimer/index.htm 

主要是为了避免重复。

谢谢。

回答

3

这样

function simplify($path) { 
    $r = array(); 
    foreach(explode('/', $path) as $p) { 
     if($p == '..') 
     array_pop($r); 
     else if($p != '.' && strlen($p)) 
     $r[] = $p; 
    } 
    $r = implode('/', $r); 
    if($path[0] == '/') $r = "/$r"; 
    return $r; 
} 

,这是你如何使用它

$u = parse_url($dirtyUrl); 
$u['path'] = simplify($u['path']); 
$clean_url = "{$u['scheme']}://{$u['host']}{$u['path']}"; 
+0

工程! 不得不在阅读您的代码片段之前了解它是如何工作的:) 非常感谢。 – Omiod

+0

为什么“服务”代码没有包含到函数本身中? :-)我会想象函数,它作为一个参数dirtyUrl并返回cleanUrl。 :-) – Radium

0

究竟是什么让你觉得这两个网址是相同的?

如果您可以用详细的方式回答此问题,请使用正则表达式或解析器来遵守您知道表示页面等效的规则。

+0

,因为它们导致相同的地址这两个网址是等价的。 如果您在地址栏上输入“脏”,浏览器会自动简化它。 – Omiod