Skip to content

fifilyu/php-domain-name

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

php-domain-name

完善的PHP域名验证库

使用php-domain-name可以对域名字符串做完善的验证。从此,不再需要使用简陋的域名验证代码。 验证通过后,域名的各个字段值都保存到了DomainName类对象。

特点

  • 内含完整的域名数据,来源于TLDsDb
  • 严格的域名格式验证。比如,对以下域名做验证,结果都会是无效
    • com
    • foobar.foobar
    • .foobar.com
    • -.foobar.com
    • baz-.foobar.com
    • -baz.foobar.com
    • %.foobar.com
    • f.com
    • -foobar.com
    • foobar-.com
    • foobar%.com
    • foobar.baz
    • aekui5phea2Eeyeelaijiex5ahniefaitied5Cohpei1Yoh6chaingohwie9pao123.com
    • aekui5phea2Eeyeelaijiex5ahniefaitied5Cohpei1Yoh6chaingohwie9pao.aekui5phea2Eeyeelaijiex5ahniefaitied5Cohpei1Yoh6chaingohwie9pao.aekui5phea2Eeyeelaijiex5ahniefaitied5Cohpei1Yoh6chaingohwie9pao.aekui5phea2Eeyeelaijiex5ahniefaitied5Cohpei1Yoh6chaingohwie9pao.com
  • 支持获取域名字段信息。比如,可以从www.foobar.com.cn中,分别得到wwwfoobarcomcn
  • 支持英文域名、中文域名、中文域名转码等等。比如:
    • foobar.com
    • 时尚.中国
    • xn--9et52u.xn--fiqs8s
    • кто.рф
    • foobar.مصر

用法

示例

<?php
require_once __DIR__ . '/src/domain_name.php';

try {
    $dn = DomainName\detect('foobar.com');
    $f_tlds = $dn->getFeildTopLevelDomains();
    $f_host = $dn->getFeildHosts();
    echo '域      名: ' . $dn->getName() . PHP_EOL;
    echo "域名字  段: " . $dn->getFeildDomainName() . PHP_EOL;
    echo "顶级域字段: " . $f_tlds[0] . PHP_EOL . PHP_EOL;


    $dn = DomainName\detect('www.foobar.com.cn');
    $f_tlds = $dn->getFeildTopLevelDomains();
    $f_host = $dn->getFeildHosts();
    echo '域      名: ' . $dn->getName() . PHP_EOL;
    echo "主机字  段: " . $f_host[0] . PHP_EOL;
    echo "域名字  段: " . $dn->getFeildDomainName() . PHP_EOL;
    echo "顶级域字段: " . $f_tlds[0] . PHP_EOL;
    echo "顶级域字段: " . $f_tlds[1] . PHP_EOL . PHP_EOL;


    $dn = DomainName\detect('时尚.中国');
    $f_tlds = $dn->getFeildTopLevelDomains();
    $f_host = $dn->getFeildHosts();
    echo '域      名: ' . $dn->getName() . PHP_EOL;
    echo "域名字  段: " . $dn->getFeildDomainName() . PHP_EOL;
    echo "顶级域字段: " . $f_tlds[0] . PHP_EOL . PHP_EOL;


    $dn = DomainName\detect('xn--9et52u.xn--fiqs8s');
    $f_tlds = $dn->getFeildTopLevelDomains();
    echo '域      名: ' . $dn->getName() . PHP_EOL;
    echo "域名字  段: " . $dn->getFeildDomainName() . PHP_EOL;
    echo "顶级域字段: " . $f_tlds[0] . PHP_EOL . PHP_EOL;

    $dn = DomainName\detect('!@#$foobar.com');
} catch (DomainName\DomainNameException $e) {
    echo '发生错误:' . $e->getMessage() . PHP_EOL;
}

示例输出

域      名: foobar.com
域名字  段: foobar
顶级域字段: .com

域      名: www.foobar.com.cn
主机字  段: www
域名字  段: foobar
顶级域字段: .com
顶级域字段: .cn

域      名: 时尚.中国
域名字  段: 时尚
顶级域字段: .中国

域      名: xn--9et52u.xn--fiqs8s
域名字  段: xn--9et52u
顶级域字段: .xn--fiqs8s

发生错误:Invalid domain name.

域名规则

域名可以包含至少两个字段,比如file.download.foobar.com,可以描述为:

  • 字段file表示主机
  • 字段download表示主机
  • 字段foobar表示域名
  • 字段.com表示(通用)顶级域

规则:

  • 任何字段不能包含A-Za-z0-9以及-以外的字符
  • 域名总长度不大于253
  • 任何字段长度不大于63
  • 域名字段长度大于1
  • 顶级域字段长度大于2
  • 至少包含一个域名字段,一个顶级域字段
  • 任何字段不能以中横线(“-”)开头或结尾
  • 域名不能以点开头
  • 顶级域字段值必须是有效的Top-level domain

域名相关资料

About

完善的PHP域名验证库

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages