如何使用php / regex从域名中删除TLD

时间:2012-09-27 02:44:38

标签: php regex

这是我到目前为止的代码。

$main = 'example.com';

$removed = str_ireplace("cant figure out what to put in here...", " ", "$main");
echo $removed;`

我知道我可以把.com放在第一个参数中,但是有数百种不同的顶级域名我试图删除。

2 个答案:

答案 0 :(得分:1)

使用parse_url删除网址,然后http-build-url在删除主机后重新建立网址。

一个简单的例子(警告 - 可能不起作用,我将在后面解释原因)。

$url = "http://example.com:port/path?query=parts&so=on";
$aParts = parse_url($url);
$aParts['host'] = '';
$removed = http_build_url($aParts);
echo $removed;

但这可能不起作用有两个原因:

  1. http_build_url是一个并不总是安装在PHP中的http函数。您可能需要从PECL获得,但在此之前......
  2. 这些函数对于构建严格的URL非常挑剔,因此您可能希望自己实际创建它。
  3. 因此,更好的解决方案是:

    $url = "http://example.com:port/path?query=parts&so=on";
    $aParts = parse_url($url);
    $aParts['host'] = '';
    $removed = ($aParts['host'] ? $aParts['host'] : 'http') . '://'
               '' .   // This is where the host goes
               ($aParts['post'] ? ':' . $aParts['port'] : '') .
               ($aParts['path'] ? '/' . $aParts['path'] : '') .
               ($aParts['query'] ? '?' . $aParts['query'] : '') .
               ($aParts['fragment'] ? '#' . $aParts['fragment'] : '');
    

    (未经过测试 - 对任何错误道歉,但你应该提出这个想法)

    添加用户并在需要时传递(检查上面链接的文档),如果要替换主机,请不要留空 - 您可以看到在哪里做。

答案 1 :(得分:1)

这就是我想出来的感谢robby让我指向了正确的方向。

$url = 'example.com.uk';
$removed  = stristr($url, '.',true);
echo  "$removed";