我有一系列数据,其中包含一些带有TLD扩展名的域名。我想单独收集域名和TLD扩展名。
E.g。从“hello.com”我想收集“hello”作为一个变量,然后收集“.com”作为另一个变量。
另一个例如重要的是,从“hello.co.uk”我想收集“你好”作为一个变量,然后收集“.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,但找不到具体的例子。
由于
答案 0 :(得分:4)
您可以使用一些简单的字符串操作,而不是使用用于文件的函数:
$domain = substr($line, 0, strpos($line, "."));
$tld = substr($line, strpos($line, "."), (strlen($line) - strlen($domain)));
答案 1 :(得分:1)
第一种方法:
$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/>";
}
答案 2 :(得分:0)
这是一个非常灵活的功能,适用于从example.com到http://username:password@example.com/public_html/test.zip到ftp://username@example.com到http://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);
}
答案 3 :(得分:0)
除了使用大型合法扩展表之外,没有可靠的方法。
一种流行的表格是Public Suffix List。
答案 4 :(得分:0)
对于使用两个( co.uk )和三个级别顶级域名( act.edu.au )的工作,您需要使用Public Suffix List的库(列表顶级域名),我建议使用TLDExtract。