2010-09-20 61 views
1

我是新来的perl,但想知道是否有人知道一个脚本,类似于下面的PHP版本,这很好!如何从Perl中的相对URL中找到完整的URL?

private function resolve_href ($base, $href) { 
    if (!$href) 
     return $base; 
    $rel_parsed = parse_url($href); 
    if (array_key_exists('scheme', $rel_parsed)) 
     return $href; 
    $base_parsed = parse_url("$base "); 
    if (!array_key_exists('path', $base_parsed)) 
     $base_parsed = parse_url("$base/ "); 
    if ($href{0} === "/") 
     $path = $href; 
    else 
     $path = dirname($base_parsed['path']) . "/$href"; 
    $path = preg_replace('~/\./~', '/', $path); 
    $parts = array(); 
    foreach (explode('/', preg_replace('~/+~', '/', $path)) as $part) { 
     if ($part === "..") 
      array_pop($parts); 
     elseif ($part!="") 
      $parts[] = $part; 
    } 
    $dir = ((array_key_exists('scheme', $base_parsed)) ? $base_parsed['scheme'] . '://' . $base_parsed['host'] : "") . "/" . implode("/", $parts); 
    return str_replace("\/", '', $dir); 
} 

任何帮助深表感谢

+1

正是这样,我们都清楚这里究竟是什么功能呢?什么是输入,输出是什么? – CanSpice 2010-09-20 17:02:30

+0

'$ base = http://foo.com/bar/poo/ $ href = ../ foobar' – 2010-09-20 17:20:08

+0

一个PHP-> Perl转换器,是公众明智吗? – vol7ron 2010-09-20 17:48:20

回答

9

URI

#!/usr/bin/perl 

use strict; use warnings; 
use URI; 

my $u = URI->new_abs('../foobar', 'http://foo.com/bar/poo/'); 
print $u->canonical; 

输出:

http://foo.com/bar/foobar
+0

:-)现在转换! – 2010-09-20 17:27:26

+0

@SinanÜnür:+1。真棒,你的回应有多快,准确。 – dawg 2010-09-20 17:47:25

+0

并不真正按照我的要求,但无论如何感谢。 – 2010-09-21 08:49:01