如何从URL获取没有TLD的主机名

时间:2014-02-06 22:10:37

标签: javascript php html

我正在创建一个网站。每次用户上传链接时,我都需要保存链接及其名称/值。这很难解释。

这就是我想说的话。让我们说用户在输入中粘贴一个链接。 https://www.google.com/该链接需要保存在XML文件中。当我拨打链接时:

<a href="<?php whatever the php is ?>"> </a>

我也想叫这个名字:

<a href="<?php whatever the php is ?>">Google</a>

我想提取&#34; google&#34;来自&#34; https://www.google.com/&#34;

我知道我可以使用:

str_replace(' ', '', )

但并非所有链接都是相同的。 我知道这段代码不会起作用,因为我已经尝试过了。 我知道正确的代码很简单可能是3行。如果你们能帮助我,我真的很感激。

谢谢。

1 个答案:

答案 0 :(得分:2)

解析网址。获取主机部分并使用点(。)作为分隔符来爆炸字符串。

$url="https://google.com/";
$parts = parse_url($url);
$parts=explode('.',$parts['host']);
echo $parts[0]; // parts[1] contains com, parts[0] contains google

要使用包含“www”的网址,您可能会执行此类操作。请注意,这不适用于子域。

echo getName("http://www.google.com"); //prints google

function getName($url){

    $parts = parse_url($url);
    $parts=explode('.',$parts['host']);
    $data=$parts[0]=="www"?$parts[1]:$parts[0];
    return $data;
}

要使用每个网址,包括子网域,我认为使用正则表达式更容易。我根据this问题修改了功能,以满足您的需求。

function getName($url){

  $pieces = parse_url($url);
  $domain = isset($pieces['host']) ? $pieces['host'] : '';
  if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) {
    return explode('.',$regs['domain'])[0];
  }
  return false;
}