-
缥缈止盈
function rel2abs($rel, $base){ /* return if already absolute URL */ if (parse_url($rel, PHP_URL_SCHEME) != '') return $rel; /* queries and anchors */ if ($rel[0]=='#' || $rel[0]=='?') return $base.$rel; /* parse base URL and convert to local variables: $scheme, $host, $path */ extract(parse_url($base)); /* remove non-directory element from path */ $path = preg_replace('#/[^/]*$#', '', $path); /* destroy path if relative url points to root */ if ($rel[0] == '/') $path = ''; /* dirty absolute URL */ $abs = "$host$path/$rel"; /* replace '//' or '/./' or '/foo/../' with '/' */ $re = array('#(/\.?/)#', '#/(?!\.\.)[^/]+/\.\./#'); for($n=1; $n>0; $abs=preg_replace($re, '/', $abs, -1, $n)) {} /* absolute URL is ready! */ return $scheme.'://'.$abs;}
-
拉丁的传说
我喜欢jordanstephens从链接提供的代码!我投它。l0oky启发了我,以确保该功能的端口,用户名和密码的网址兼容。我的项目需要它。function rel2abs( $rel, $base ){ /* return if already absolute URL */ if( parse_url($rel, PHP_URL_SCHEME) != '' ) return( $rel ); /* queries and anchors */ if( $rel[0]=='#' || $rel[0]=='?' ) return( $base.$rel ); /* parse base URL and convert to local variables: $scheme, $host, $path */ extract( parse_url($base) ); /* remove non-directory element from path */ $path = preg_replace( '#/[^/]*$#', '', $path ); /* destroy path if relative url points to root */ if( $rel[0] == '/' ) $path = ''; /* dirty absolute URL */ $abs = ''; /* do we have a user in our URL? */ if( isset($user) ) { $abs.= $user; /* password too? */ if( isset($pass) ) $abs.= ':'.$pass; $abs.= '@'; } $abs.= $host; /* did somebody sneak in a port? */ if( isset($port) ) $abs.= ':'.$port; $abs.=$path.'/'.$rel; /* replace '//' or '/./' or '/foo/../' with '/' */ $re = array('#(/\.?/)#', '#/(?!\.\.)[^/]+/\.\./#'); for( $n=1; $n>0; $abs=preg_replace( $re, '/', $abs, -1, $n ) ) {} /* absolute URL is ready! */ return( $scheme.'://'.$abs );}
-
海绵宝宝撒
添加了对保留当前查询的支持。对?page = 1很有帮助,依此类推...function rel2abs($rel, $base){ /* return if already absolute URL */ if (parse_url($rel, PHP_URL_SCHEME) != '') return ($rel); /* queries and anchors */ if ($rel[0] == '#' || $rel[0] == '?') return ($base . $rel); /* parse base URL and convert to local variables: $scheme, $host, $path, $query, $port, $user, $pass */ extract(parse_url($base)); /* remove non-directory element from path */ $path = preg_replace('#/[^/]*$#', '', $path); /* destroy path if relative url points to root */ if ($rel[0] == '/') $path = ''; /* dirty absolute URL */ $abs = ''; /* do we have a user in our URL? */ if (isset($user)) { $abs .= $user; /* password too? */ if (isset($pass)) $abs .= ':' . $pass; $abs .= '@'; } $abs .= $host; /* did somebody sneak in a port? */ if (isset($port)) $abs .= ':' . $port; $abs .= $path . '/' . $rel . (isset($query) ? '?' . $query : ''); /* replace '//' or '/./' or '/foo/../' with '/' */ $re = ['#(/\.?/)#', '#/(?!\.\.)[^/]+/\.\./#']; for ($n = 1; $n > 0; $abs = preg_replace($re, '/', $abs, -1, $n)) { } /* absolute URL is ready! */ return ($scheme . '://' . $abs);}