在PHP中删除字符串的某些部分

时间:2013-02-13 18:14:24

标签: php javascript string

我已经看过很多关于这个问题的问题,但似乎都没有解决我的问题。我想创建一个函数来删除网站地址中的所有内容,域名除外。 例如,如果用户输入: 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语句来检查数组的长度。如果它大于2,则选择项目nr1而不是项目nr0。这显然给了我与使用.co.uk的任何域相关的麻烦(因为这将是树项长,但我不想返回co)。我会尝试稍微解决一下,看看我想出了什么。如果你们中的一些PHP专家可以看一看,我会很高兴的。我不像你们任何人那样熟练或经验丰富......:P

6 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

您可以使用PHP中的parse_url函数来准确返回您想要的内容 - see

答案 3 :(得分:0)

使用php中的parse_url方法获取domain.com,然后将replace .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 REGEX: Get domain from URL

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

答案 4 :(得分: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 =不区分大小写 \ =转义字符 $ =字符串的结尾

这必须围绕和调整,但它应该让你指向正确的方向。

答案 5 :(得分:-2)

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

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

我会在有机会的时候更新它,但基本上它会在完全停止时将URL拆分成碎片,然后返回应该是域的第二个项目。对于更长的域名,例如www.abc.xyz.com,需要更多的逻辑,但对于普通的URL,它就足够了。