如何从 Perl 中的相对 URL 中找到完整的 URL?

Posted

技术标签:

【中文标题】如何从 Perl 中的相对 URL 中找到完整的 URL?【英文标题】:How can I find the full URL from a relative URL in Perl? 【发布时间】:2011-04-14 19:08:40 【问题描述】:

我是 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 ($href0 === "/")
        $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 );

非常感谢任何帮助

【问题讨论】:

我们都清楚了,这个函数到底是做什么的?什么是输入,什么是输出? $base = http://foo.com/bar/poo/ $href = ../foobar 哇 PHP->Perl 转换器,大众变得聪明了吗? 大众很聪明,这就是他们学习 PHP 的原因。然而,“知道”的人使用更高效的语言,例如 perl。 【参考方案1】:

见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

【讨论】:

@SinanÜnür:+1。您的回复如此快速和准确,真是太棒了。 @Sinan Ünür 是否可以使用它来确定 301 重定向的 url,即 $response->header('Location'); 可能返回 ./mod_rewrite_urlhttp://domain.com @Phil 这是一个不同的问题(与 LWP 相关),我认为 *** 上有人问过这个问题。如果找不到,请将其作为单独的问题发布。 我会调查一下,然后在需要时发布。谢谢你的一切。

以上是关于如何从 Perl 中的相对 URL 中找到完整的 URL?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Perl,如何在保持参照完整性的同时从单个表加载多个表?

如何从 django 视图中的绝对 url 获取相对 url?

如何从 C# 中的相对 URL 字符串中获取参数?

perl 中的相对文件路径

如何从 JavaScript 中的字符串中提取基本 URL?

wp_login_url()返回相对URL而不是完整URL