php获取url端口_PHP: parse_url - Manual

In reply to adrian,

Thank you very much for your function. There is a small issue with your relative protocol function. You need to remove the // when making the url the path. Here is the new function.

function resolve_url($base, $url) {

if (!strlen($base)) return $url;

// Step 2

if (!strlen($url)) return $base;

// Step 3

if (preg_match('!^[a-z]+:!i', $url)) return $url;

$base = parse_url($base);

if ($url{0} == "#") {

// Step 2 (fragment)

$base['fragment'] = substr($url, 1);

return unparse_url($base);

}

unset($base['fragment']);

unset($base['query']);

if (substr($url, 0, 2) == "//") {

// Step 4

return unparse_url(array(

'scheme'=>$base['scheme'],

'path'=>substr($url,2),

));

} else if ($url{0} == "/") {

// Step 5

$base['path'] = $url;

} else {

// Step 6

$path = explode('/', $base['path']);

$url_path = explode('/', $url);

// Step 6a: drop file from base

array_pop($path);

// Step 6b, 6c, 6e: append url while removing "." and ".." from

// the directory portion

$end = array_pop($url_path);

foreach ($url_path as $segment) {

if ($segment == '.') {

// skip

} else if ($segment == '..' && $path && $path[sizeof($path)-1] != '..') {

array_pop($path);

} else {

$path[] = $segment;

}

}

// Step 6d, 6f: remove "." and ".." from file portion

if ($end == '.') {

$path[] = '';

} else if ($end == '..' && $path && $path[sizeof($path)-1] != '..') {

$path[sizeof($path)-1] = '';

} else {

$path[] = $end;

}

// Step 6h

$base['path'] = join('/', $path);

}

// Step 7

return unparse_url($base);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值