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



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

这就是我想说的。 假设用户在输入中粘贴了一个链接。 https://www.google.com/ 链接需要保存在 XML 文件中。 当我调用链接时:

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

我也想叫这个名字:

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

我想从"https://www.google.com/"中提取"谷歌"

我知道我可以使用:

str_replace(' ', '', )

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

谢谢。

解析 url。 获取主机部分,并用点 (.) 作为分隔符分解字符串。

$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;
}

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

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;
}

最新更新