layershifter / tld-extract
TLDExtract,用于提取域名部分的库,例如域名解析器
Requires
- php: ^5.5.0 || ^7.0
- layershifter/tld-database: ^1.0
- layershifter/tld-support: ^1.1
- symfony/polyfill-intl-idn: ^1.10
Requires (Dev)
- phpmd/phpmd: @stable
- phpunit/phpunit: ^4.8 || ^5.0
- squizlabs/php_codesniffer: ~2.0
README
考虑使用https://github.com/jeremykendall/php-domain-parser作为维护的替代方案。
TLDExtract
TLDExtract
准确地将通用顶级域名(gTLD)或国家代码顶级域名(ccTLD)从URL的注册域名和子域名中分离出来,例如域名解析器。例如,假设您只想获取'http://www.google.com'中的'google'部分。
每个人都会犯这个错误。在'.'上分割并取最后两个元素的方法在您只考虑简单的例如.com域名时非常有效。例如,解析http://forums.bbc.co.uk:上述天真分割方法将给出'dom'作为域名和'uk'作为顶级域名,而不是'bbc'和'co.uk'。
另一方面,TLDExtract
通过根据公共后缀列表查找目前活跃的顶级域名和二级域名,知道所有通用顶级域名和国家代码顶级域名的样子。因此,给定一个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" }
Result
实现了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-1、PSR-2、PSR-4规范。如果您发现符合性疏忽,请通过拉取请求发送补丁。
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);
变更日志
请参阅 CHANGELOG 以获取有关最近更改的更多信息。
测试
$ composer test
贡献
请参阅 CONTRIBUTING 和 CONDUCT 以获取详细信息。
许可证
此库基于 Apache 2.0 许可证发布。请参阅 许可证文件 以获取更多信息。