获取基本域名php 函数getHost($Address){ $parseUrl=parse_url(trim($Address)); 返回修剪($parseUrl[主机] ?$parseUrl[主机] :数组_移位(分解(“/”,$parseUrl[path],2)) ); } $httpreferer=getHost($\u SERVER['HTTP\u REFERER']); $httpreferer=preg_replace(“#^(http(s):/)?w{3}\.#',“$1',$httpreferer); echo$httpreferer;

获取基本域名php 函数getHost($Address){ $parseUrl=parse_url(trim($Address)); 返回修剪($parseUrl[主机] ?$parseUrl[主机] :数组_移位(分解(“/”,$parseUrl[path],2)) ); } $httpreferer=getHost($\u SERVER['HTTP\u REFERER']); $httpreferer=preg_replace(“#^(http(s):/)?w{3}\.#',“$1',$httpreferer); echo$httpreferer;,php,Php,我使用它剥离http://、www和子域以仅返回主机,但它返回以下内容: http://site.google.com ==>google.com http://google.com ==>com 我如何让它在子域存在时删除它,而不是在它不存在时剥离到tld 从parse\u url开始,特别是parse\u url($url)['host'] $arr = parse_url($url); echo preg_replace('/^www\./', '', $arr['host

我使用它剥离http://、www和子域以仅返回主机,但它返回以下内容:

http://site.google.com ==>google.com
http://google.com      ==>com

我如何让它在子域存在时删除它,而不是在它不存在时剥离到tld

parse\u url
开始,特别是
parse\u url($url)['host']

 $arr = parse_url($url);
 echo preg_replace('/^www\./', '', $arr['host'])."\n";
输出

site.google.com
google.com

这部分的正则表达式只是匹配
www.
如果它是字符串的开头,您可能可以通过几种方法来完成这部分,例如

无子域

如果您根本不想要任何子域:

$arr = parse_url($url)['host'];
echo preg_replace('/^(?:[-a-z0-9_]+\.)?([-a-z0-9_]+\..+)$/', '$1',$arr['host'])."\n";

无子域,无国家代码

$arr = parse_url($url)['host'];
echo preg_replace('/^(?:[-a-z0-9_]+\.)?([-a-z0-9_]+)(\.[^.]+).*?$/', '$1$2',$arr['host'])."\n";

它是如何工作的

与前一个相同,但域与主机分离,我们不只是捕获所有内容,而是捕获除
之外的所有内容,在新组之外,我们捕获所有内容(令人混淆的是.is everything here),但使用
*?
捕获,这意味着
*
0次或更多次,
非贪婪型不从前面的表达式中获取字符

或者换一种说法。捕获任何内容0次或更多次不要从以前的匹配中窃取字符。这样,如果没有
www.google.com
之类的东西,我们只担心
.com
之后的东西,那么它的0匹配。但是如果它的
www.google.com.uk
.uk
匹配

单行答案

有些版本的PHP,我忘了是什么版本,但较新的版本实际上允许您这样做:

   $host = parse_url($url)['host'];
最后一个例子,我们可以把它压缩成一行,去掉变量赋值

  echo preg_replace('/^(?:[-a-z0-9_]+\.)?([-a-z0-9_]+)(\.[^.]+).*?$/', '$1$2',parse_url($url)['host'])."\n";

那只是为了好玩

夏季

使用
parse_url
确实是一种“正确”的方法。或者是正确的开始方式,因为它去除了很多其他的“东西”,给你一个好的开始。无论如何,这对我来说很有趣…:)。。。我需要休息一下,不再编写我的网站,因为现在对我来说太乏味了(它已经8年了,所以我在WordPress中重做了,我已经做了无数的WordPress网站)


干杯,希望有帮助

parse\u url
开始,特别是
parse\u url($url)['host']

 $arr = parse_url($url);
 echo preg_replace('/^www\./', '', $arr['host'])."\n";
输出

site.google.com
google.com

这部分的正则表达式只是匹配
www.
如果它是字符串的开头,您可能可以通过几种方法来完成这部分,例如

无子域

如果您根本不想要任何子域:

$arr = parse_url($url)['host'];
echo preg_replace('/^(?:[-a-z0-9_]+\.)?([-a-z0-9_]+\..+)$/', '$1',$arr['host'])."\n";

无子域,无国家代码

$arr = parse_url($url)['host'];
echo preg_replace('/^(?:[-a-z0-9_]+\.)?([-a-z0-9_]+)(\.[^.]+).*?$/', '$1$2',$arr['host'])."\n";

它是如何工作的

与前一个相同,但域与主机分离,我们不只是捕获所有内容,而是捕获除
之外的所有内容,在新组之外,我们捕获所有内容(令人混淆的是.is everything here),但使用
*?
捕获,这意味着
*
0次或更多次,
非贪婪型不从前面的表达式中获取字符

或者换一种说法。捕获任何内容0次或更多次不要从以前的匹配中窃取字符。这样,如果没有
www.google.com
之类的东西,我们只担心
.com
之后的东西,那么它的0匹配。但是如果它的
www.google.com.uk
.uk
匹配

单行答案

有些版本的PHP,我忘了是什么版本,但较新的版本实际上允许您这样做:

   $host = parse_url($url)['host'];
最后一个例子,我们可以把它压缩成一行,去掉变量赋值

  echo preg_replace('/^(?:[-a-z0-9_]+\.)?([-a-z0-9_]+)(\.[^.]+).*?$/', '$1$2',parse_url($url)['host'])."\n";

那只是为了好玩

夏季

使用
parse_url
确实是一种“正确”的方法。或者是正确的开始方式,因为它去除了很多其他的“东西”,给你一个好的开始。无论如何,这对我来说很有趣…:)。。。我需要休息一下,不再编写我的网站,因为现在对我来说太乏味了(它已经8年了,所以我在WordPress中重做了,我已经做了无数的WordPress网站)

干杯,希望有帮助

找到了答案

$testAdd = "https://testing.google.co.uk";
$parse = parse_url($testAdd);
$httpreferer = preg_replace("/^([a-zA-Z0-9].*\.)?([a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z.]{2,})$/", '$2', $parse['host']);


echo $httpreferer;
这也将处理具有国家TLD的域

谢谢你的帮助。

找到了答案

$testAdd = "https://testing.google.co.uk";
$parse = parse_url($testAdd);
$httpreferer = preg_replace("/^([a-zA-Z0-9].*\.)?([a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z.]{2,})$/", '$2', $parse['host']);


echo $httpreferer;
这也将处理具有国家TLD的域


谢谢你的帮助。

这听起来像是一个很难解决的问题,因为“子域”实际上没有任何意义。您将很难使用TLD,例如
.co.uk
too您的意思是它返回
http://site.google.com
因为这不会删除它,请参见@ArtisticPhoenix,谢谢您添加它。我盯着OP的正则表达式思考,“但这只会删除‘www’”,据我所知,函数会删除除主机和子域以外的所有内容,然后preg_replace会检查一个www或一个周期,并在它离开域之前删除所有内容,但它似乎只在www上工作,而不是子域上。例如,如果referer是http://www.site.com,则返回变量将是site.com,如果referer是http://sub.site.com,则返回值将是sub.site.com,并且它是我要删除的sub。您可能最好从URL获取主机,然后解析
dig
查询或还有别的。您也可以通过一个调用从parse\u url获取主机,
parse\u url($url,PHP\u url\u host)
这听起来像是一个非常困难的问题,因为“子域”实际上并不意味着什么。您将很难使用TLD,如
.co.uk