Php 从完整URL获取域名
假设有人输入如下URL:Php 从完整URL获取域名,php,url,Php,Url,假设有人输入如下URL: http://i.imgur.com/a/b/c?query=value&query2=value 我想返回:imgur.com 不i.imgur.com 这是我现在掌握的代码 $sourceUrl = parse_url($url); $sourceUrl = $sourceUrl['host']; 但是这会返回i.imgur.com检查下面的代码,它应该可以很好地完成工作 <?php function get_domain($url) { $
http://i.imgur.com/a/b/c?query=value&query2=value
我想返回:imgur.com
不i.imgur.com
这是我现在掌握的代码
$sourceUrl = parse_url($url);
$sourceUrl = $sourceUrl['host'];
但是这会返回
i.imgur.com
检查下面的代码,它应该可以很好地完成工作
<?php
function get_domain($url)
{
$pieces = parse_url($url);
$domain = isset($pieces['host']) ? $pieces['host'] : $pieces['path'];
if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) {
return $regs['domain'];
}
return false;
}
print get_domain("http://mail.somedomain.co.uk"); // outputs 'somedomain.co.uk'
?>
使用以下方法:
$uri = "$_SERVER[REQUEST_URI]";<br>
print($uri);
$uri=“$\u服务器[请求\u uri]”
打印(uri);
例如:
http://exemple.com/?directory<br>
Result:
/?diretory
http://exemple.com/?directory
结果:
/?董事会
命令获取目录而不是域。如果您只需要域名,请尝试以下操作:
$domain = $_SERVER['SERVER_NAME'];
echo $domain;
你需要使用这个软件包。是的,您可以在parse_url()或regex周围使用字符串函数,但它们会在复杂的url中产生错误的结果 我建议进行域解析,以下是示例代码:
$url = 'http://i.imgur.com/a/b/c?query=value&query2=value';
parse_url($url, PHP_URL_HOST); // will return 'i.imgur.com'
$extract = new LayerShifter\TLDExtract\Extract();
$result = $extract->parse($url);
$result->getFullHost(); // will return 'i.imgur.com'
$result->getSubdomain(); // will return 'i'
$result->getRegistrableDomain(); // will return 'imgur.com'
$result->getSuffix(); // will return 'com'
我在publicsuffix.org上找到了一个非常有用的库, 是一个用PHP实现的基于公共后缀列表的域解析器
字符串(16)“scottwills.co.uk”
下面的代码应该非常适合这项工作
function get_domain($url){
$charge = explode('/', $url);
$charge = $charge[2]; //assuming that the url starts with http:// or https://
return $charge;
}
echo get_domain('http://www.example.com/example.php');
那么以“这是一个获取域名实名的方法”开头的那一个呢!非常感谢。我认为这是最好的答案。这有点棘手。它最终会为一级CCTLD的子域返回不正确的结果,如
blah.blah.de
。但是如果不使用公共后缀列表,就无法解决这个问题。这对www.domain.com
-parse_url()不起作用。parse_url()需要一个协议(http://)来定义主机,否则它只是路径。在第一个下面需要第二个条件:$domain=(空($domain)和&isset($pieces['path'])$片段['path']:$domain
@stanev01这不起作用,它是从url获取主机名的函数。原始url是您的url和$store\u url返回主机url。问题涉及用户输入的url,而不是他们访问的地址。
<?php
// this will do the job
require_once '../vendor/autoload.php';
$pslManager = new Pdp\PublicSuffixListManager();
$parser = new Pdp\Parser($pslManager->getList());
var_dump($parser->getRegistrableDomain('www.scottwills.co.uk'));
?>
function get_domain($url){
$charge = explode('/', $url);
$charge = $charge[2]; //assuming that the url starts with http:// or https://
return $charge;
}
echo get_domain('http://www.example.com/example.php');