你如何从PHP中的URL中删除域名?

46 php urlparse

我正在寻找一种方法(或函数)去掉任何提供给函数的URL的domain.ext部分.域扩展可以是任何东西(.com,.co.uk,.nl,.whatever),并且输入它的URL可以是从http://www.domain.com到www.domain.com/path的任何内容./script.php?=whatever

这是最好的方法吗?

Rob*_*ell 99

parse_url将URL转换为关联数组:

php > $foo = "http://www.example.com/foo/bar?hat=bowler&accessory=cane";
php > $blah = parse_url($foo);
php > print_r($blah);
Array
(
    [scheme] => http
    [host] => www.example.com
    [path] => /foo/bar
    [query] => hat=bowler&accessory=cane
)
Run Code Online (Sandbox Code Playgroud)


Dav*_*idM 12

您可以使用parse_url()来执行此操作:

$url = 'http://www.example.com';
$domain = parse_url($url, PHP_URL_HOST);
$domain = str_replace('www.','',$domain);
Run Code Online (Sandbox Code Playgroud)

在此示例中,$ domain应包含example.com,无论它是否具有www.它也适用于.co.uk这样的域名

  • $ domain包含www.example.com. (7认同)

fir*_*der 10

您还可以编写正则表达式以获得您想要的内容.

这是我的尝试:

$pattern = '/\w+\..{2,3}(?:\..{2,3})?(?:$|(?=\/))/i';
$url = 'http://www.example.com/foo/bar?hat=bowler&accessory=cane';
if (preg_match($pattern, $url, $matches) === 1) {
    echo $matches[0];
}
Run Code Online (Sandbox Code Playgroud)

输出是:

example.com
Run Code Online (Sandbox Code Playgroud)

此模式还考虑了诸如"example.com.au"之类的域.

注意:我没有咨询相关的RFC.

  • 这是涵盖所有案例的最佳解决方案.谢谢 (3认同)

And*_*eyP 7

以下代码将从绝对 URL 中删除协议、域和端口:

$urlWithoutDomain = preg_replace('#^.+://[^/]+#', '', $url);
Run Code Online (Sandbox Code Playgroud)