PHP如何拆分URL?需提取协议、域名及后续参数
用PHP优雅拆分URL的正确姿势
嘿,别纠结explode()啦——手动拆分URL很容易踩坑(比如遇到无www域名、多段后缀域名、参数里带特殊字符的情况),PHP早就给我们准备好了专门的工具:parse_url()函数,能完美帮你拆分出想要的每一部分!
为什么不用explode()?
举个例子,如果你用explode('/', $url)来拆,遇到https://www.example.co.uk/blog这种域名时,你很难准确把www.example.co.uk单独摘出来;要是URL里参数带了/(虽然不符合规范但偶尔会遇到),拆分结果直接就乱了。parse_url()是PHP原生处理URL的函数,能自动识别URL的标准结构,省心多了。
具体用法示例
拿你给出的URL:http://www.thiswebsite.com/thispage.php?this=parameter&thisis_anotherone,我们来拆分它:
// 目标URL $url = 'http://www.thiswebsite.com/thispage.php?this=parameter&thisis_anotherone'; // 用parse_url拆分,得到关联数组 $urlParts = parse_url($url); // 提取你需要的各个部分 $protocol = $urlParts['scheme']; // 输出:http $domain = $urlParts['host']; // 输出:www.thiswebsite.com $path = $urlParts['path']; // 输出:/thispage.php $queryString = $urlParts['query']; // 输出:this=parameter&thisis_anotherone // 如果还要把查询参数拆成键值对数组,用parse_str就行 parse_str($queryString, $queryParams); // 现在$queryParams是: // Array( // 'this' => 'parameter', // 'thisis_anotherone' => '' // )
兼容无www的情况
完全不用担心!比如你的URL是https://thiswebsite.com/abc,parse_url()返回的host就是thiswebsite.com,和带www的情况处理逻辑完全一致,不需要额外写判断。
小提示:处理不带协议的URL
如果遇到用户输入的URL不带http://或https://(比如直接写www.thiswebsite.com),parse_url()会把域名识别成path的一部分。这时候可以先给URL补个协议再处理:
$url = 'www.thiswebsite.com/thispage.php'; // 检查是否已有协议,没有就补http:// if (!preg_match('#^https?://#i', $url)) { $url = 'http://' . $url; } $urlParts = parse_url($url);
这样就能保证拆分结果的准确性啦!
内容的提问来源于stack exchange,提问作者Rick A.
相关产品推荐
相关产品推荐

