如何在PHP中从完整URL字符串提取主URL?
在PHP中提取URL的主域名部分
嘿,这个需求其实用PHP自带的parse_url()函数就能轻松搞定,这也是最稳妥的方案——毕竟它是专门为解析URL结构设计的,比手动截取字符串靠谱多了!
方法一:使用parse_url()(推荐)
parse_url()会把完整URL拆分成多个组成部分,我们只需要取出**协议(scheme)和域名(host)**拼接起来就行:
$fullUrl = 'https://www.website.com/b/vIGmD7VS/team-to-do'; // 解析URL,得到各部分数组 $parsedUrl = parse_url($fullUrl); // 拼接主URL $mainUrl = $parsedUrl['scheme'] . '://' . $parsedUrl['host']; echo $mainUrl; // 输出:https://www.website.com
处理带端口的URL
如果你的URL包含端口号(比如https://www.website.com:8080/path),可以判断并加上端口:
$fullUrl = 'https://www.website.com:8080/b/vIGmD7VS/team-to-do'; $parsedUrl = parse_url($fullUrl); $mainUrl = $parsedUrl['scheme'] . '://' . $parsedUrl['host']; // 如果存在端口,追加到主URL后 if (isset($parsedUrl['port'])) { $mainUrl .= ':' . $parsedUrl['port']; } echo $mainUrl; // 输出:https://www.website.com:8080
方法二:手动字符串截取(不推荐)
如果你不想用内置函数,也可以通过字符串定位截取,但这种方法对特殊URL结构兼容性较差,比如遇到带用户名密码的URL(https://user:pass@website.com)就会出错,仅作参考:
$fullUrl = 'https://www.website.com/b/vIGmD7VS/team-to-do'; // 找到"//"之后的第一个"/"的位置 $pos = strpos($fullUrl, '/', strpos($fullUrl, '//') + 2); // 截取从开头到该位置的内容,如果没找到就返回原URL $mainUrl = $pos !== false ? substr($fullUrl, 0, $pos) : $fullUrl; echo $mainUrl; // 输出:https://www.website.com
总之,优先选择parse_url()的方案,它能处理绝大多数URL场景,避免手动截取的各种坑。
内容的提问来源于stack exchange,提问作者Tejas
相关产品推荐
相关产品推荐

