21,887
社区成员
发帖
与我相关
我的任务
分享
<?php
$srcurl="css/css.css";
$baseurl="http://swap.gfahs.com/index.php?gd=fxrw&g_id=gz-9999-fxrw&channel=33943";
$baseurl2="http://www.baidu.com/aaa/2/";
echo format_url($srcurl, $baseurl)."<br />";
//输出为http://swap.gfahs.com/index.php/css/css.css
//实际想要的效果输出应该为http://swap.gfahs.com/css/css.css
echo format_url($srcurl, $baseurl2)."<br />";
//输出为http://www.baidu.com/aaa/css/css.css
//实际想要的效果输出应该为http://www.baidu.com/aaa/2/css/css.css
function format_url($srcurl, $baseurl) {
$srcinfo = parse_url($srcurl);
if(isset($srcinfo['scheme'])) {
return $srcurl;
}
$baseinfo = parse_url($baseurl);
$url = $baseinfo['scheme'].'://'.$baseinfo['host'];
if(substr($srcinfo['path'], 0, 1) == '/') {
$path = $srcinfo['path'];
}else{
//以下做兼容dirname
if(strlen(dirname($baseinfo['path']))>1){
$path = dirname($baseinfo['path']).'/'.$srcinfo['path'];
}else{
$path = $baseinfo['path'].'/'.$srcinfo['path'];
}
}
$rst = array();
$path_array = explode('/', $path);
if(!$path_array[0]) {
$rst[] = '';
}
foreach ($path_array AS $key => $dir) {
if ($dir == '..') {
if (end($rst) == '..') {
$rst[] = '..';
}elseif(!array_pop($rst)) {
$rst[] = '..';
}
}elseif($dir && $dir != '.') {
$rst[] = $dir;
}
}
if(!end($path_array)) {
$rst[] = '';
}
$url .= implode('/', $rst);
return str_replace('\\', '/', $url);
}
?>
function format_url($srcurl, $baseurl) {
$srcinfo = parse_url($srcurl);
if(isset($srcinfo['scheme'])) {
return $srcurl;
}
$baseinfo = parse_url($baseurl);
$url = $baseinfo['scheme'].'://'.$baseinfo['host'];
if(substr($srcinfo['path'], 0, 1) == '/') {
$path = '';
}else{
//以下做兼容dirname
if(substr($baseinfo['path'], -1) != '/') {
$path = str_replace('\\', '/', dirname($baseinfo['path']));
}else{
$path = $baseinfo['path'];
}
}
return $url . $path . $srcurl;
}
http://swap.gfahs.com/css/css.css
http://www.baidu.com/aaa/2/css/css.css
function format_url($srcurl, $baseurl) {
if (substr($srcurl, 0, 1) != '/') {
$srcurl = '/' . $srcurl;
}
$baseurl = explode('/', $baseurl);
$last = str_replace(array('?', '&'), '.', $baseurl[count($baseurl) - 1]);
if (empty($last) || strpos($last, '.') !== false) {
array_pop($baseurl);
}
return implode('/', $baseurl) . $srcurl;
}
试着自己写了一个,原理是将baseurl用'/'切割成数组,判断最后一个元素是否包含? . &这3个符号