Как найти полный URL из относительного URL в Perl? - PullRequest
1 голос
/ 20 сентября 2010

Я новичок в Perl, но мне было интересно, если кто-нибудь знает сценарий, который был похож на следующую версию PHP, которая прекрасно работает!

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 Ответ

9 голосов
/ 20 сентября 2010

См. 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
...