You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从URL中提取不含www、http前缀且包含TLD的主域名?

PHP提取主域名+TLD组合方案

你目前用parse_url()只能提取完整主机名,没法自动剥离子域名、匹配co.uk这类多级后缀。不需要你自己手动维护所有TLD列表的方案如下:

推荐方案(零手动维护TLD,覆盖所有合法后缀场景)

直接用PHP生态已经封装好公共后缀列表(PSL)的解析库即可,这类库会自动同步官方最新的后缀数据,你不需要自己收集整理任何TLD信息。

  1. 首先通过composer安装依赖:
    composer require league/uri-hostname-parser
  2. 业务代码示例:
<?php
require 'vendor/autoload.php';

use League\Uri\HostnameParser;

// 初始化解析器,自动加载官方最新公共后缀列表
$parser = HostnameParser::createFromDefaultPublicSuffixList();

// 你的测试输入
$testInputs = [
    'subdomain.example.com',
    'https://example.com',
    'http://www.example.com',
    'example.com',
    'www.example.com',
    'www.example.co.uk'
];

foreach ($testInputs as $input) {
    // 先提取主机部分,兼容带协议、路径的输入
    $host = parse_url($input, PHP_URL_HOST) ?: $input;
    // 解析获取主域名+后缀的完整组合
    $result = $parser->parse($host)->registrableDomain;
    echo $result . PHP_EOL;
}

上述代码运行后,所有测试用例都会输出你需要的example.com、example.co.uk结果,可覆盖所有合法的顶级、二级甚至三级后缀场景,不需要你手动更新任何TLD数据。

简易替代方案(仅适配简单场景)

如果你的业务场景里输入的子域名只有www这一种,且不需要适配co.uk这类多级后缀,可以直接用字符串处理快速实现:

function getMainDomain($input) {
    $host = parse_url($input, PHP_URL_HOST) ?: $input;
    // 去掉开头的www.前缀
    return ltrim($host, 'www.');
}

注意该方案仅能覆盖极简单场景,遇到sub.example.co.uk这类输入时会返回错误结果,仅适合临时快速使用。

内容的提问来源于stack exchange,提问作者panthro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:57:03