Php 如何在没有www、subdomain和com/net/org/etc的情况下获取域名
我只需要从url中获取域名,(没有com和其他内容)示例: 我有:Php 如何在没有www、subdomain和com/net/org/etc的情况下获取域名,php,url,dns,Php,Url,Dns,我只需要从url中获取域名,(没有com和其他内容)示例: 我有: http://www.subdomain.domain1.com/ www.subdomain.domain2.net subdomain.subdomain2.domain3.org/ http://domain4.com 我想了解PHP: domain1 domain2 domain3 domain4 使用“PHP\u URL\u HOST”参数 然后在“.”上提取结果数组的倒数第二个元素以获取域,您可以使用$\u S
http://www.subdomain.domain1.com/
www.subdomain.domain2.net
subdomain.subdomain2.domain3.org/
http://domain4.com
我想了解PHP:
domain1
domain2
domain3
domain4
使用“PHP\u URL\u HOST”参数
然后在“.”上提取结果数组的倒数第二个元素以获取域,您可以使用
$\u SERVER[“SERVER\u NAME”]
使用不希望包含的子域分解字符串
例如。
subdomain.domain.com
<?php
$add=explode('subdomain.',$_SERVER["SERVER_NAME"])[1];
// $add = domain.com
?>
希亚姆的答案是最好的。您只需确保所有URL都以HTTP开头,并在末尾添加strtok(见下文)。下面是另一个使用阵列的版本:
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>";
函数获取域($url)
{
$urlobj=解析url($url);
$domain=$urlobj['host'];
if(preg_match('/(?P[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i',$domain,$regs))
{
返回$regs['domain'];
}
返回false;
}
$URL=数组(
'http://www.subdomain.domain1.com/',
'http://www.subdomain.domain2.net',
'http://subdomain.subdomain2.domain3.org/',
'http://domain4.com'
);
//使用foreach+strtok删除。[域扩展]
回声“”;
foreach($url作为$url)
{
echo“- ”.strtok(get_domain($url),”)。“
”;
}
回声“
”;
这将输出:
- 域1
- 域2
- 域3
- 域4
另外,您可以将strtok添加到函数中,如下所示:
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;
}
函数获取域($url)
{
$urlobj=解析url($url);
$domain=$urlobj['host'];
if(preg_match('/(?P[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i',$domain,$regs))
{
返回strtok($regs['domain'],'.');
}
返回false;
}
然后:
$url=array(
'http://www.subdomain.domain1.com/',
'http://www.subdomain.domain2.net',
'http://subdomain.subdomain2.domain3.org/',
'http://domain4.com'
);
//使用foreach
回声“”;
foreach($url作为$url)
{
回显“- ”。获取域($url)。“
”;
}
回声“
”;
减去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>";
}
$url=array(
'http://www.subdomain.domain1.com/',
'http://www.subdomain.domain2.net',
'http://subdomain.subdomain2.domain3.org/',
'http://domain4.com'
);
//使用foreach
foreach($url作为$url)
{
echo获取域($url)。“
”;
}
输出:
域1
域2
域3
domain4
基于并采用所建议的概念来获取名称空间的倒数第二个元素,我可能建议使用一个更简单的正则表达式,它利用锚定的前瞻性,如下所示:
函数获取域($url){
$matches=[];
preg_match('/[\w-]+(?=(?:\.\w{2,6}){1,2}(?:\/\124;$)/',$url,$matches);
返回$matches[0];
}
火柴
中的名称
https://www.names.co.uk/
中的域1
http://www.subdomain.domain1.com/
www.subdomain.domain2.net中的domain2
subdomain.subdomain2.domain3.org/
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
但如何获得倒数第二个元素?所以我可以用解决方案更新帖子。谢谢请注意可能包含顶级域名的URL,例如
.co.uk
(顺便问一下,这些域名也被正式称为顶级域名吗?)等等。@fireeydboy说得很好!如果你只有IP,它也不起作用。这不是一个灵活的解决方案-它只在子域已知时起作用。
$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>";
}