【问题标题】:PHP Finding a domain name and domain extension from an arrayPHP 从数组中查找域名和域扩展名
【发布时间】:2012-12-21 20:54:09
【问题描述】:

我有一组数据,其中包含一些带有 TLD 扩展名的域。我想分别收集域名和 TLD 扩展名。

例如从“hello.com”我想收集“hello”作为一个变量,然后收集“.com”作为另一个变量。

另一个例子重要的是,我想从“hello.co.uk”收集“hello”作为一个变量,然后收集“.co.uk”作为另一个变量。

我当前使用 pathinfo() 的代码可以在“hello.com”上正常工作,但不能在“hello.co.uk”上正常工作。对于“hello.co.uk”,它将收集“hello.co”作为一个变量,然后收集“.uk”作为另一个变量。

这是我正在使用的代码:

// Get a file into an array
$lines = file($_FILES['file']['tmp_name']);

// Loop through array
foreach ($lines as $line_num => $line) {
    echo $line;

    //Find TLD
    $tld = ".".pathinfo($line, PATHINFO_EXTENSION);
    echo $tld;

    //Find Domain
    $domain = pathinfo($line, PATHINFO_FILENAME);
    echo $domain;
    }

希望我解释得足够好。 我经常使用 stackoverflow,但找不到具体的例子。

谢谢

【问题讨论】:

标签: php dns tld pathinfo


【解决方案1】:

您可以使用一些简单的字符串操作,而不是使用用于文件的函数:

$domain = substr($line, 0, strpos($line, "."));
$tld = substr($line, strpos($line, "."), (strlen($line) - strlen($domain)));

【讨论】:

  • 将我的 strpos 编辑为 strstr,因为我怀疑自己,然后第一次意识到我是对的......教训:永远不要怀疑自己。
【解决方案2】:

第一种方法:

$domains = array("hello.co.uk", "hello.com");

foreach ($domains as $d) {

    $ext = strstr($d, '.'); // extension
    $index = strpos($d, '.');

    $arr = str_split($d, $index);

    $domain = $arr[0]; // domain name


    echo "domain: $domain, extension: $ext <br/>";

}

第二种方法:(感谢hakre)

$domains = array("hello.co.uk", "hello.com");

foreach ($domains as $d) {

    list($domain, $ext) = explode('.', $d, 2);
    echo "domain: $domain, extension: $ext <br/>";

}

【讨论】:

    【解决方案3】:

    这是一个非常灵活的函数,适用于从 example.com 到 http://username:password@example.com/public_html/test.zipftp://username@example.comhttp://www.reddit.com/r/aww/comments/165v9u/shes_allergic_couldnt_help_herself/ 的所有内容

    function splitDomain($url) { 
     $host = "";
     $url = parse_url($url);
     if(isset($url['host'])) { 
        $host = $url['host'];
     } else {
        $host = $url['path'];
     }
     $host = str_replace('www.','',$host);
     $tmp = explode('.', $host);
     $name = $tmp[0];
     $tld = $tmp[1];
    return array('name'=>$name,'tld'=>$tld);
    }
    

    【讨论】:

    【解决方案4】:

    除了使用大型合法扩展表之外,没有可靠的方法来做到这一点。

    一种流行的表是称为Public Suffix List 的表。

    【讨论】:

      【解决方案5】:

      要使用两个 (co.uk) 和三个级别的 TLD (act.edu.au),您需要使用 Public Suffix List 的库(顶级列表域),我建议使用TLDExtract

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-13
        • 2023-04-03
        • 1970-01-01
        • 2013-05-01
        • 2021-02-12
        • 2012-02-28
        • 1970-01-01
        相关资源
        最近更新 更多