猿问

使用PHP将相对路径转换成绝对URL

如何使用PHP将相对路径转换为绝对URL?



Cats萌萌
浏览 808回答 3
3回答

缥缈止盈

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);}
随时随地看视频慕课网APP
我要回答