如何从 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_url
或 http://domain.com
?
@Phil 这是一个不同的问题(与 LWP 相关),我认为 *** 上有人问过这个问题。如果找不到,请将其作为单独的问题发布。
我会调查一下,然后在需要时发布。谢谢你的一切。以上是关于如何从 Perl 中的相对 URL 中找到完整的 URL?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Perl,如何在保持参照完整性的同时从单个表加载多个表?
如何从 django 视图中的绝对 url 获取相对 url?