inbox/tld-extract

TLDExtract,用于提取域名部分的库,例如域名解析器

2.0.2 2022-06-10 12:40 UTC

This package is not auto-updated.

Last update: 2024-09-28 22:36:57 UTC


README

请考虑使用https://github.com/jeremykendall/php-domain-parser作为维护的替代方案。

TLDExtract

TLDExtract精确地将通用顶级域(gTLD)或国家代码顶级域(ccTLD)从URL的注册域名和子域名中分离出来,例如域名解析器。例如,如果你想只获取'http://www.google.com'中的'google'部分。

Latest Version on Packagist Software License Build Status Coverage Status Total Downloads

每个人都会犯这个错误。在'.'上分割并取最后两个元素的方法在考虑简单的例如.com域名时很有用。以http://forums.bbc.co.uk为例:上述简单的分割方法会给出'domain'作为域名和'co.uk'作为顶级域,而不是分别给出'bbc'和'co.uk'。

TLDExtract另一方面,通过查看根据公共后缀列表列出的当前存在的所有gTLDs和ccTLDs来知道所有gTLDs和ccTLDs的外观。因此,给定一个URL,它知道它的子域来自它的域名,它的域名来自它的国家代码。

$result = tld_extract('http://forums.news.cnn.com/');
var_dump($result);

object(LayerShifter\TLDExtract\Result)#34 (3) {
  ["subdomain":"LayerShifter\TLDExtract\Result":private]=>
  string(11) "forums.news"
  ["hostname":"LayerShifter\TLDExtract\Result":private]=>
  string(3) "cnn"
  ["suffix":"LayerShifter\TLDExtract\Result":private]=>
  string(3) "com"
}

结果实现了ArrayAccess接口,因此您可以简单地访问其结果。

var_dump($result['subdomain']);
string(11) "forums.news"
var_dump($result['hostname']);
string(3) "cnn"
var_dump($result['suffix']);
string(3) "com"

您还可以直接将结果转换为JSON。

var_dump($result->toJson());
string(54) "{"subdomain":"forums.news","hostname":"cnn","suffix":"com"}"

此包符合PSR-1PSR-2PSR-4。如果您注意到符合性的疏忽,请通过pull request发送补丁。

TLDExtract会向公共后缀列表网站发出请求吗?

不。 TLDExtract使用来自TLDDatabase的数据库,该数据库由公共后缀列表生成并定期更新。它不会对解析或验证域名发出任何HTTP请求。

要求

以下版本的PHP受到支持。

  • PHP 5.5
  • PHP 5.6
  • PHP 7.0
  • PHP 7.1
  • PHP 7.2
  • PHP 7.3
  • HHVM

安装

通过Composer

$ composer require layershifter/tld-extract

额外的结果方法

LayerShifter\TLDExtract\Result有一些可用的方法

$extract = new LayerShifter\TLDExtract\Extract();

# For domain 'shop.github.com'

$result = $extract->parse('shop.github.com');
$result->getFullHost(); // will return (string) 'shop.github.com'
$result->getRegistrableDomain(); // will return (string) 'github.com'
$result->isValidDomain(); // will return (bool) true
$result->isIp(); // will return (bool) false

# For IP '192.168.0.1'

$result = $extract->parse('192.168.0.1');
$result->getFullHost(); // will return (string) '192.168.0.1'
$result->getRegistrableDomain(); // will return null
$result->isValidDomain(); // will return (bool) false
$result->isIp(); // will return (bool) true

自定义数据库

默认情况下,包使用来自TLDDatabase包的数据库,但您可以简单地覆盖此行为

new LayerShifter\TLDExtract\Extract(__DIR__ . '/cache/mydatabase.php');

有关更多详细信息以及如何保持数据库更新的信息,请参阅TLDDatabase

实现自己的结果

默认情况下,解析后您将收到LayerShifter\TLDExtract\Result类的对象,但有时您可能需要自己的方法或额外的功能。

您可以创建自己的类,该类实现LayerShifter\TLDExtract\ResultInterface,并将其用作解析结果。

class CustomResult implements LayerShifter\TLDExtract\ResultInterface {}

new LayerShifter\TLDExtract\Extract(null, CustomResult::class);

解析模式

包有三种解析模式

  • 允许ICANN后缀(域名是由ICANN或IANA根区域数据库委派的域名);
  • 允许私有域名(域名是域名持有者提交给公共后缀列表的修正,作为他们如何操作其域名安全策略的表达);
  • 允许自定义(不在列表中,但可用的域名,例如:example,mycompany等)。

为了与公共后缀列表的想法保持兼容,默认情况下包以所有这些模式运行,但您可以轻松地更改此行为

use LayerShifter\TLDExtract\Extract;

new Extract(null, null, Extract::MODE_ALLOW_ICANN);
new Extract(null, null, Extract::MODE_ALLOW_PRIVATE);
new Extract(null, null, Extract::MODE_ALLOW_NOT_EXISTING_SUFFIXES);
new Extract(null, null, Extract::MODE_ALLOW_ICANN | Extract::MODE_ALLOW_PRIVATE);

变更日志

请参阅变更日志获取关于最近变更的更多信息。

测试

$ composer test

贡献

请参阅贡献指南行为准则以获取详细信息。

许可证

此库采用Apache 2.0许可证发布。请参阅许可证文件获取更多信息。