问题
I just need to get the domain name only form a url, (without com and everything else) example:
I have:
http://www.subdomain.domain1.com/
www.subdomain.domain2.net
subdomain.subdomain2.domain3.org/
http://domain4.com
I want to get with PHP:
domain1
domain2
domain3
domain4
回答1:
parse_url()
with the "PHP_URL_HOST" argument
then explode() on the "." and extract the penultimate element of the resulting array
回答2:
Building off of Shyam's answer and employing the concept suggested by Mark Baker to get the penultimate element of the namespace, I might suggest using a simpler regular expression that utilizes an anchored lookahead like the following:
function get_domain($url) {
$matches = [];
preg_match('/[\w-]+(?=(?:\.\w{2,6}){1,2}(?:\/|$))/', $url, $matches);
return $matches[0];
}
Matches
names
inhttps://www.names.co.uk/
domain1
inhttp://www.subdomain.domain1.com/
domain2
inwww.subdomain.domain2.net
domain3
insubdomain.subdomain2.domain3.org/
domain4
inhttp://domain4.com
seventymm
inhttp://www.seventymm.co.in/browse/buy-home-furnishing-bed-sheets-pack-of-3/2456/1/v2034/0/0/1/2/1/0/go
回答3:
Shyam's answer is the best. You just have to make sure all the the URLs start with HTTP and add strtok at the end(see below). Here's another version using an array:
function get_domain($url)
{
$urlobj = parse_url($url);
$domain = $urlobj['host'];
if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs))
{
return $regs['domain'];
}
return false;
}
$urls = array(
'http://www.subdomain.domain1.com/',
'http://www.subdomain.domain2.net',
'http://subdomain.subdomain2.domain3.org/',
'http://domain4.com'
);
// Using foreach + strtok to remove .[domain extensions]
echo "<ul>";
foreach($urls as $url)
{
echo "<li>" . strtok(get_domain($url),'.') . "</li>";
}
echo "</ul>";
This will output:
- domain1
- domain2
- domain3
- domain4
function get_domain($url)
{
$urlobj = parse_url($url);
$domain = $urlobj['host'];
if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs))
{
return strtok($regs['domain'], '.');
}
return false;
}
then:
$urls = array(
'http://www.subdomain.domain1.com/',
'http://www.subdomain.domain2.net',
'http://subdomain.subdomain2.domain3.org/',
'http://domain4.com'
);
// Using foreach
echo "<ul>";
foreach($urls as $url)
{
echo "<li>" . get_domain($url) . "</li>";
}
echo "</ul>";
Minus ul/li:
$urls = array(
'http://www.subdomain.domain1.com/',
'http://www.subdomain.domain2.net',
'http://subdomain.subdomain2.domain3.org/',
'http://domain4.com'
);
// Using foreach
foreach($urls as $url)
{
echo get_domain($url)."<br>";
}
Output:
domain1
domain2
domain3
domain4
回答4:
To get the domain , you can use $_SERVER["SERVER_NAME"]
.
Explode the string with the subdomain you do not want to include.
Eg. subdomain.domain.com
<?php
$add=explode('subdomain.',$_SERVER["SERVER_NAME"])[1];
// $add = domain.com
?>
来源:https://stackoverflow.com/questions/13495828/how-to-get-the-domain-name-without-www-subdomain-and-com-net-org-etc