2010-09-20 42 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