首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清除php中的url

清除php中的url
EN

Stack Overflow用户
提问于 2011-03-25 03:58:12
回答 3查看 210关注 0票数 1

我正在尝试让用户提交链接框。我试了一整天,但似乎不能使它工作。

我们的目标是将所有这些都转化为example.com...(即删除顶级域之前的所有内容)

输入为$url =

它们有4种类型的url:

代码语言:javascript
复制
www.example.com...
example.com...
http://www.example.com...
http://example.com...

我制作的所有东西都适用于1或2种类型,但不是所有4种类型。

怎么能做到这一点呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-25 04:00:25

为此,您可以使用parse_url。例如:

代码语言:javascript
复制
function parse($url) {
    $parts = parse_url($url);
    if ($parts === false) {
        return false;
    }
    return isset($parts['scheme']) 
            ? $parts['host'] 
            : substr($parts['path'], 0, strcspn($parts['path'], '/'));
}

这将留下"www.“如果它已经存在,那就部分,但是用str_replace去掉它是微不足道的。如果你给它的url是严重错误的,它将返回false

更新(改进的解决方案):

我意识到,如果你试图足够努力地欺骗它,上面的方法就不会正常工作。因此,我意识到这样做会更好,而不是在没有方案的情况下鞭打自己试图补偿:

代码语言:javascript
复制
function parse($url) {
    $parts = parse_url($url);
    if ($parts === false) {
        return false;
    }
    if (!isset($parts['scheme'])) {
        $parts = parse_url('http://'.$url);
    }
    if ($parts === false) {
        return false;
    }

    return $parts['host'];
}
票数 1
EN

Stack Overflow用户

发布于 2011-03-25 04:13:56

您的输入可以是

  • www.example.com
  • http://www.example.com
  • http://example.com
  • example.com

$url_arr = parse_url($url);

echo $url_arr'host';

输出为example.com

票数 0
EN

Stack Overflow用户

发布于 2011-03-25 04:27:22

有几个步骤可以让你得到一个干净的url。

首先,您需要确保有一个协议可以让parse_url正常工作,这样您就可以:

代码语言:javascript
复制
//Make sure it has a protocol
if(substr($url,0,7) != 'http://' || substr($url,0,8) != 'https://')
{
    $url = 'http://' . $url;
}

现在我们通过parse_url()运行它

代码语言:javascript
复制
$segments = parse_url($url);

但这就是它变得复杂的地方,因为域名的构建方式是你可以有1,2,3,4,5,6。这意味着你不能从所有的urls中检测到域名,你必须有一个预编译的.domain列表来检查域名的最后一部分,这样你就可以从网站的域名中提取出来。

这里有一个列表:http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1

但最好将此列表解析为mysql,然后选择tld与域字符串左侧匹配的行。

然后按长度排序,并限制为1,如果找到,则可以执行以下操作:

代码语言:javascript
复制
$db_found_tld = 'co.uk';
$domain = 'a.b.c.domain.co.uk';
$domain_name = substr($domain,0 - strlen($db_found_tld));

这将留下a.b.c.domain,所以您已经删除了tld,现在域名将被提取如下:

代码语言:javascript
复制
$parts = explode($domain_name);
$base_domain = $parts[count($parts) - 1];

现在您有了domain

这看起来很冗长,但我希望你现在知道,没有tld或子域,只获取域名并不容易。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5424792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档