当前位置:  开发笔记 > 编程语言 > 正文

去哪里PHP parse_url()没有 - 只解析域

如何解决《去哪里PHPparse_url()没有-只解析域》经验,为你挑选了2个好方法。

PHP的parse_url()有一个主机字段,其中包含完整的主机.我正在寻找最可靠(也是最便宜)的方式来返回域和TLD.

举个例子:

http://www.google.com/foo,parse_url ()返回www.google.com for host

http://www.google.co.uk/foo,parse_url()返回www.google.co.uk主持人

我只想找google.comgoogle.co.uk.我已经考虑了一个有效的TLD /后缀表,只允许这些和一个单词.你会以其他方式做吗?有没有人知道这种事情的预先有效的REGEX?



1> lpfavreau..:

这样的事情怎么样?

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

将使用经典提取域名parse_url,然后查找没有任何子域的有效域(www是子域).不会在'localhost'之类的东西上工作.如果不匹配则返回false.

//编辑:

尝试一下:

echo getDomain('http://www.google.com/test.html') . '
'; echo getDomain('https://news.google.co.uk/?id=12345') . '
'; echo getDomain('http://my.subdomain.google.com/directory1/page.php?id=abc') . '
'; echo getDomain('https://testing.multiple.subdomain.google.co.uk/') . '
'; echo getDomain('http://nothingelsethan.com') . '
';

它应该返回:

google.com
google.co.uk
google.com
google.co.uk
nothingelsethan.com

当然,如果它没有通过parse_url,它将不会返回任何内容,因此请确保它是一个格式良好的URL.

//附录:

Alnitak是对的.上面提出的解决方案在大多数情况下都有效,但不一定都需要维护,例如,确保它们不是具有.morethan6字符的新TLD等等.提取域的唯一可靠方法是使用维护列表,例如http://publicsuffix.org/.一开始它更痛苦但长期更容易和更强大.您需要确保了解每种方法的优缺点以及它如何适合您的项目.


我投了这个 - 这不是正确的答案.只用一个简单的正则表达式就不可能明确地找出"域部分"(即忽略"www"等).查看相关问题及其他地方相关的答案.publicsuffix.org列表是最可靠的方法.

2> Alnitak..:

目前唯一"正确"的方法是使用http://publicsuffix.org/上保存的列表.

顺便说一句,这个问题也几乎与以下内容重复:

我可以改进有效域名的正则表达式检查吗?

从URL获取子域

IETF正在进行标准化工作,寻找DNS方法来声明DNS树中的特定节点是否用于"公共"注册,但它们还处于早期开发阶段.所有流行的非IE浏览器都使用publicsuffix.org列表.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有