【问题标题】:How can I find the full URL from a relative URL in Perl?如何从 Perl 中的相对 URL 中找到完整的 URL?
【发布时间】: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 ($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 );
}

非常感谢任何帮助

【问题讨论】:

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

标签: perl url href base


【解决方案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 相关),我认为 Stackoverflow 上有人问过这个问题。如果找不到,请将其作为单独的问题发布。
  • 我会调查一下,然后在需要时发布。谢谢你的一切。
猜你喜欢
  • 2012-11-06
  • 2010-10-24
  • 2010-09-12
  • 2017-08-13
  • 2021-10-17
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多