亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用PHP將相對路徑轉換成絕對URL

使用PHP將相對路徑轉換成絕對URL

PHP
Cats萌萌 2019-10-21 10:44:31
如何使用PHP將相對路徑轉換為絕對URL?
查看完整描述

3 回答

?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

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;

}


查看完整回答
反對 回復 2019-10-21
?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

我喜歡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 );

}


查看完整回答
反對 回復 2019-10-21
?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

添加了對保留當前查詢的支持。對?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);

}


查看完整回答
反對 回復 2019-10-21
  • 3 回答
  • 0 關注
  • 825 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號