2013-02-13 83 views
1

我已经看到了关于这个确切主题的一堆问题,但似乎没有一个能够解决我的问题。我想创建一个功能,将删除网站地址的所有内容,除了域名。 例如,如果用户输入:​​我想计算器,并以同样的方式,如果用户输入facebook.com/user/bacon我想Facebook的在PHP中删除字符串的某些部分

有谁知道一个函数或方法,我可以删除某些部分的字符串?也许它会搜索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语句来检查数组的长度。如果它大于2,则选择项目nr1而不是项目nr0。这显然会给我使用.co.uk的任何域名带来麻烦(因为那会长树项目,但我不想返回co)。我会尽力解决这个问题,看看我想出了什么。如果你们有些PHP大师可以看一下,我会很高兴。我并不熟练或经历任何的你...:P

+0

没有直接回答你的问题(因为它看起来像一个[XY问题](http://www.perlmonks.org/index.pl?node_id=542341)),为什么不使用[parse_url函数] (http://php.net/manual/en/function.parse-url.php)? – kojiro 2013-02-13 18:17:36

+0

好的,谢谢。我试着寻找答案,但只发现有人想分裂让我们说一个字符串,其中包含预设的东西。我不知道在php中有一个函数做了我想要的。非常感谢! :) – Aleksander 2013-02-13 18:19:38

+0

它必须是一个可以访问当前[tld](https://en.wikipedia.org/wiki/Top-level_domain)或[公共后缀列表](https)列表的例程://en.wikipedia.org/wiki/Public_Suffix_List),以正确分析实际的域名部分,你感兴趣的地方开始。 – 2013-02-13 18:21:43

回答

-2

这是一个非常快速的方法,但应该做你想做的事,PHP:

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

当我我会更新得到机会,但基本上它将URL分割成片段,然后返回应该是域的第二项。如果www.abc.xyz.com这些较长的域名需要更多的逻辑,但对于普通的url来说就足够了。

+0

它不会为http://stackoverflow.com(没有www)为例。 – Napolux 2013-02-13 18:20:58

+1

您不能在5.4之前的PHP版本中为下标返回一个数组。 – kojiro 2013-02-13 18:20:59

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 
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 
+0

谢谢!伟大的工作:) – Aleksander 2013-02-13 18:22:35

+0

“mydomain.co.uk”呢? – 2013-02-13 18:22:37

+0

@fireeyedboy它会正确返回“mydomain”,因为我们得到结果(在这种情况下是3个元素)数组的第一项( – Gargron 2013-02-13 18:23:57

0

可以使用parse_url函数从PHP返回你想要什么 - see

+0

是的,我直到现在还不知道。谢谢回答 :) – Aleksander 2013-02-13 18:22:56

0

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

preg_match preg_replace

我会用这样的方式开始:找到.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 =不区分大小写 \ =逃逸字符 $ =字符串的结尾

这必须要与周围的发挥和调整,但它应该让你指出正确的方向。