10

URLを指定して、パブリックサフィックスリスト(有効なTLDのリスト、たとえばこのリスト)を使用して登録済みドメインを抽出するにはどうすればよいですか?

たとえば、考慮a.bgは有効なパブリックサフィックスです。

http://www.test.start.a.bg/hello.html -> start.a.bg 
http://test.start.a.bg/               -> start.a.bg
http://test.start.abc.bg/             -> abc.bg (.bg is the public suffix)

パブリックサフィックスはTLDに応じて複数のレベルで構成される可能性があるため、これは単純な文字列操作を使用して行うことはできません。

PSリスト(データベースまたはフラットファイル)の読み取り方法は関係ありませんが、リストはローカルでアクセスできる必要があるため、常に外部サービスに依存しているわけではありません。

4

3 に答える 3

17

を使用parse_url()してホスト名を抽出し、 regdomが提供するライブラリを使用して、登録済みドメイン名(dn + eTLD)を決定できます。例えば:

require_once("effectiveTLDs.inc.php");
require_once("regDomain.inc.php");

$url =  'http://www.metu.edu.tr/dhasjkdas/sadsdds/sdda/sdads.html';
echo getRegisteredDomain(parse_url($url, PHP_URL_HOST));

印刷されmetu.edu.trます。

私が試した他の例:

http://www.xyz.start.bg/hello   ->   start.bg
http://www.start.a.bg/world     ->   start.a.bg  (a.bg is a listed eTLD)
http://xyz.ma219.metu.edu.tr    ->   metu.edu.tr
http://www.google.com/search    ->   google.com
http://google.co.uk/search?asd  ->   google.co.uk

更新:これらのライブラリは次の場所に移動されました:https ://github.com/leth/registered-domains-php

于 2011-11-25T19:38:06.210 に答える
4

この質問は少し古いですが、新しい解決策があります:https ://github.com/jeremykendall/php-domain-parser

このライブラリはまさにあなたが望むことをします。設定は次のとおりです。

$pslManager = new Pdp\PublicSuffixListManager();
$parser = new Pdp\Parser($pslManager->getList());
echo $parser->getRegisterableDomain('www.scottwills.co.uk');

これは印刷されます"scottwills.co.uk"

于 2015-04-07T19:48:41.687 に答える
1

TLDExtractを使用することをお勧めします。これには、 PSLから生成された定期的に更新可能なデータベースがあります。

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

$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
于 2016-06-20T10:27:57.483 に答える