【问题标题】:How to get the hostname without TLD from a url如何从 url 获取没有 TLD 的主机名
【发布时间】:2014-02-06 22:10:36
【问题描述】:

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

这就是我想说的。假设用户在输入中粘贴链接。 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/”中提取“google”

我知道我可以使用:

str_replace(' ', '', )

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

谢谢。

【问题讨论】:

标签: javascript php html


【解决方案1】:

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

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

要处理每个 url,包括子域,我认为使用正则表达式更容易。我调整了this question 中的功能以满足您的需求。

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

【讨论】:

  • $parts 将是数组( 0 => 'www' 1 => 'google' 2 => 'com' ),并非所有网址都可能有 www
  • 编辑了该函数,使其适用于带有和不带有 www 的 url。子域将不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 2021-08-27
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多