我需要从字符串中提取域名,这可能是任何东西。如:
$sitelink="http://www.somewebsite.com/product/3749875/info/overview.html";
或
$sitelink="http://subdomain.somewebsite.com/blah/blah/whatever.php";
无论如何,我想提取'somewebsite.com'部分(可能是任何东西),并丢弃其余部分。
答案 0 :(得分:10)
<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';
print_r(parse_url($url));
?>
The above example will output:
Array
(
[scheme] => http
[host] => hostname
[user] => username
[pass] => password
[path] => /path
[query] => arg=value
[fragment] => anchor
)
使用thos值
echo parse_url($url, PHP_URL_HOST); //hostname
或
$url_info = parse_url($url);
echo $url_info['host'];//hostname
答案 1 :(得分:4)
这里是
<?php
$sitelink="http://www.somewebsite.com/product/3749875/info/overview.html";
$domain_pieces = explode(".", parse_url($sitelink, PHP_URL_HOST));
$l = sizeof($domain_pieces);
$secondleveldomain = $domain_pieces[$l-2] . "." . $domain_pieces[$l-1];
echo $secondleveldomain;
请注意,这可能不是您要寻找的行为,因为对于
等主机而言stackoverflow.co.uk
它会回应“co.uk”
请参阅:
http://publicsuffix.org/learn/
http://www.dkim-reputation.org/regdom-libs/
http://www.dkim-reputation.org/regdom-lib-downloads/&lt; - 在这里下载,包括php
答案 2 :(得分:1)
2 complexe url
$url="https://www.example.co.uk/page/section/younameit";
or
$url="https://example.co.uk/page/section/younameit";
获取“www.example.co.uk”:
$host=parse_url($url, PHP_URL_HOST);
仅获得“example.co.uk”
$parts = explode('www.',$host);
$domain = $parts[1];
如果您的网址包含“www”。或不是你得到相同的最终结果,即“example.co.uk”
瞧!
答案 3 :(得分:1)
您需要使用Public Suffix List的软件包,只有这样您才能正确提取具有二级,三级TLD(co.uk,a.bg,b.bg等)和多级子域的域名。正则表达式,parse_url()或字符串函数永远不会产生绝对正确的结果。
我建议使用TLD Extract。这里是代码示例:
$extract = new LayerShifter\TLDExtract\Extract();
$result = $extract->parse('http://www.somewebsite.com/product/3749875/info/overview.html');
$result->getSubdomain(); // will return (string) 'www'
$result->getHostname(); // will return (string) 'somewebsite'
$result->getSuffix(); // will return (string) 'com'
$result->getRegistrableDomain(); // will return (string) 'somewebsite.com'
答案 4 :(得分:0)
对于可能是任何东西的字符串,新方法:
function extract_plain_domain($text) {
$text=trim($text,"/");
$text=strtolower($text);
$parts=explode("/",$text);
if (substr_count($parts[0],"http")) {
$parts[0]="";
}
reset ($parts);while (list ($key, $val) = each ($parts)) {
if (!empty($val)) { $text=$val; break; }
}
$parts=explode(".",$text);
if (empty($parts[2])) {
return $parts[0].".".$parts[1];
} else {
$num_parts=count($parts);
return $parts[$num_parts-2].".".$parts[$num_parts-1];
}
} // end function extract_plain_domain
答案 5 :(得分:0)
您可以使用Utopia Domains库(https://github.com/utopia-php/domains),它将根据Mozilla公共后缀列表(https://publicsuffix.org)返回域TLD和公共后缀,它可以用作当前已存档的TLDExtract软件包。
您可以使用'parse_url'函数从URL中获取主机名,然后使用Utopia Domains解析器获取正确的TLD并将其与域名一起加入>
<?php
require_once './vendor/autoload.php';
use Utopia\Domains\Domain;
$url = 'http://demo.example.co.uk/site';
$domain = new Domain(parse_url($url, PHP_URL_HOST)); // demo.example.co.uk
var_dump($domain->get()); // demo.example.co.uk
var_dump($domain->getTLD()); // uk
var_dump($domain->getSuffix()); // co.uk
var_dump($domain->getName()); // example
var_dump($domain->getSub()); // demo
var_dump($domain->isKnown()); // true
var_dump($domain->isICANN()); // true
var_dump($domain->isPrivate()); // false
var_dump($domain->isTest()); // false
var_dump($domain->getName().'.'.$domain->getSuffix()); // example.co.uk