自定义的parse_url逆向函数http_build_url,将数组转为url字符串

parse_url函数可以讲一个url字符串解析成一个数组,但是php中似乎没有parse_url的逆向函数来讲一个解析出来的数组组合成url字符串,只有一个http_build_query用来将数组组合成query string。于是我自己写了一个http_build_url函数将parse_url解析出来的数组组合成完整的url。

/**
 * 根据parse_url格式的数组生成完整的url
 * @param array $arr 接受parse_url解析出来的所有参数,完整参数实例如下:
 *        Array
 *        (
 *            [scheme] => http            // 协议
 *            [host] => www.baidu.com     // 主机
 *            [port] => 80                // 端口,可选
 *            [path] => /path/file.php    // 路径(文件名),可选
 *            [query] => a=aaa&b=aaabbb    // 参数(query string),可选
 *            [fragment] => 123            // 附加部分或者叫做锚点(#后面的),可选
 *        )
*/
function http_build_url($url_arr){
    $new_url = $url_arr['scheme'] . "://".$url_arr['host'];
    if(!empty($url_arr['port']))
        $new_url = $new_url.":".$url_arr['port'];
    $new_url = $new_url . $url_arr['path'];
    if(!empty($url_arr['query']))
        $new_url = $new_url . "?" . $url_arr['query'];
    if(!empty($url_arr['fragment']))
        $new_url = $new_url . "#" . $url_arr['fragment'];
    return $new_url;
}

使用测试:

$url = "http://www.dragondean.cn:80/path/file.php?a=aaa&b=bcdefg#123";
$url_arr = parse_url($url);
print_r($url_arr);
        
$url_new = http_build_url($url_arr);
echo $url_new;

运行结果:

Array
(
    [scheme] => http
    [host] => www.dragondean.cn
    [port] => 80
    [path] => /path/file.php
    [query] => a=aaa&b=bcdefg
    [fragment] => 123
)
http://www.dragondean.cn:80/path/file.php?a=aaa&b=bcdefg#123
原文地址:https://www.cnblogs.com/dragondean/p/php-http_build_url-parse_url.html