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