[英]PHP Finding a domain name and domain extension from an array
我有一個包含一些帶有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,但是找不到特定的示例。
謝謝
除了使用用於文件的函數外,您還可以使用一些簡單的字符串操作:
$domain = substr($line, 0, strpos($line, "."));
$tld = substr($line, strpos($line, "."), (strlen($line) - strlen($domain)));
第一種方法:
$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/>";
}
這是一個非常靈活的功能,可以使用從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);
}
除了使用大量合法擴展名外,沒有其他可靠的方法。
一種流行的表是稱為“ 公共后綴列表”的表 。
為了使用兩個( co.uk )和三個級別的TLD( act.edu.au ),您需要使用公共后綴列表 (頂級域列表)的庫,我建議使用TLDExtract 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.