0

我已经看到了很多关于这个确切主题的问题,但似乎没有一个能解决我的问题。我想创建一个函数,该函数将从网站地址中删除除域名之外的所有内容。例如,如果用户输入:http://www.stackoverflow.com/blahblahblah我想获得stackoverflow,如果用户输入facebook.com/user/bacon我想获得facebook

有谁知道我可以删除字符串某些部分的函数或方法?也许它会搜索 http,当找到它时,它会删除所有内容,直到 // 然后它会搜索 www,如果找到它会删除所有内容,直到 . 然后它会保留所有内容直到下一个点,它会删除它后面的所有内容?现在来看,这可能会导致http://www.en.wikipedia.org等网站出现问题,因为我只剩下 en。

有什么想法(最好用 PHP,但也欢迎使用 JavaScript)?

编辑 1: 多亏了很好的反馈,我想我已经能够制定出一个我想要的功能:

 function getdomain($url) {
    $parts = parse_url($url);
    if($parts['scheme'] != 'http') {
       $url = 'http://'.$url;
    }
    $parts2 = parse_url($url);

    $host = $parts2['host'];
    $remove = explode('.', $host);

    $result = $remove[0];
    if($result == 'www') {
       $result = $remove[1];
    }

    return $result;
 } 

它并不完美,至少考虑到子域,但我认为可以做点什么。也许在末尾添加第二个 if 语句来检查数组的长度。如果它大于两个,则选择项目 nr1 而不是项目 nr0。这显然给我带来了与使用 .co.uk 的任何域相关的麻烦(因为这将是很长的树项目,但我不想返回 co)。我会尝试解决它一点点,看看我想出了什么。如果你们中的一些 PHP 专家也可以看看,我会很高兴。我不像你们中的任何人那样熟练或经验丰富......:P

4

6 回答 6

1

使用 parse_url 将 URL 拆分为不同的部分。您需要的是主机名。然后你会想用点分割它并得到第一部分:

$url    = 'http://facebook.com/blahblah';
$parts  = parse_url($url);
$host   = $parts['host']; // facebook.com
$foo    = explode('.', $host);
$result = $foo[0]; // facebook
于 2013-02-13T18:20:16.470 回答
0

使用 php 中的 parse_url 方法获取 domain.com,然后使用空字符串替换 .com。我对正则表达式有点生疏,但这应该可以。

$url='http://www.en.wikipedia.org';
$domain = parse_url($url, PHP_URL_HOST); //Will return en.wikipedia.org
$domain = preg_replace('\.com|\.org', '', $domain);

http://php.net/manual/en/function.parse-url.php

PHP 正则表达式:从 URL 获取域

http://rubular.com/r/MvyPO9ijnQ //检查正则表达式

于 2013-02-13T18:27:33.233 回答
0

您正在寻找有关正则表达式的信息。这有点复杂,所以请准备好阅读。在您的情况下,您最好使用preg_matchand preg_replace。它会根据您的模式搜索匹配项,并用您的替换项替换匹配项。

preg_match preg_replace

我会从这样的模式开始: find.com或删除它以及它之后的所有内容.net.org然后找到最后一个.并删除它以及它前面的所有内容。最后,如果//存在,删除它以及它前面的所有内容。

if (preg_match("/^http:\/\//i",$url))
preg_replace("/^http:\/\//i","",$url);

if (preg_match("/www./i",$url))
preg_replace("/www./i","",$url);

if (preg_match("/.com/i",$url))
preg_replace("/.com/i","",$url);

if (preg_match("/\/*$/",$url))
preg_replace("/\/*$/","",$url);

^= 在字符串的开头 i= 不区分大小写 \= 转义字符 $= 字符串的结尾

这将不得不被玩弄和调整,但它应该让你指向正确的方向。

于 2013-02-13T18:33:00.287 回答
0

您可以使用parse_urlPHP 中的函数,它会返回您想要的内容 -请参阅

于 2013-02-13T18:20:56.863 回答
0

Javascript:

document.domain.replace(".com","")

PHP:

$url = 'http://google.com/something/something';
$parse = parse_url($url);
echo str_replace(".com","", $parse['host']); //returns google
于 2013-02-13T18:19:31.590 回答
-2

这是一个非常快速的方法,但应该在 PHP 中执行您想要的操作:

function getDomain( $URL ) {
    return explode('.',$URL)[1];
}

当我有机会时我会更新它,但基本上它会将 URL 拆分为句号,然后返回应该是域的第二项。对于较长的域,例如 www.abc.xyz.com,需要更多的逻辑,但对于普通的 url,这就足够了。

于 2013-02-13T18:19:00.253 回答