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