【问题标题】:Determine current domain character length确定当前域字符长度
【发布时间】:2012-12-08 06:52:46
【问题描述】:

我正在解析域并遇到处理子域的问题。如果域是http://www.google.co.uk,我想得到google的长度是6。

在这种情况下,我使用parse_url() 来返回主机 www.google.co.uk,就像这样。

$url    = 'http://www.google.co.uk';    
$info   = parse_url($url);    
// remove www. and return google.co.uk
$new    = str_replace('www.','',$info['host']); 
$pieces = explode(".", $new); 
$len    = strlen($pieces[0]); // returns character length of google = 6
echo $len;

如果域包含像http://test.google.co.uk 这样的子域,我的代码将不起作用:它返回长度为 4;我希望它返回 6 的长度。

有什么想法吗?

【问题讨论】:

  • 那么,对于test.google.co.uk,您希望长度是多少?
  • 我只想返回域的长度而不是任何子域。如果有像 test.google.co.uk 这样的子域,那么长度将等于 4,因为 $pieces[0] 会将第一部分设为“test”而不是 google。
  • 您是说在test.google.co.uk 的情况下,您希望长度为6?
  • 如果没有包含所有 TLD 的列表,您将无法执行此操作。无法确定 x.y.z x 或 y 是否是域。想象一下google.co.ukgoogle.com
  • 可能是重新考虑策略的时候了——导致这条实施路线的总体目标/目的是什么?

标签: php strlen parse-url


【解决方案1】:

输出正确。当输入为http://test.google.co.uk 时,parse_url('http://test.google.co.uk')['host'] 的值为http://test.google.co.uk。当您在点上展开此字符串时,数组的第一个元素将为 test,其长度为 4。

要获得google 而不是test,您需要像在第一个示例中所做的那样将子域替换为空,或者获取分解字符串中的第二个元素。例如:

$url    = 'http://test.google.co.uk';    
$info   = parse_url($url);    
$pieces = explode(".", $info['host']); 
$len    = strlen($pieces[1]); // returns character length of google = 6
echo $len;

【讨论】:

    【解决方案2】:

    除了收集和硬编码所有已知的公共二级区域(如co.uk、com.uaco.tw 等)并在您的代码中过滤它们之外,别无他法。请注意将test.example.ua 检测为test,因为example.com.uaexample.ua 都是有效域(uk 区域不是这种情况)。

    您的代码可能如下所示:

    function mainDomainLength($fullDomain) {
        //$fullDomain = 'DOMAIN.co.uk';
        $zones = array('uk' => array('co'), 'ua' => array('com', 'org'), ...);
        $domainArray = explode('.', $fullDomain);
        if (count($domain) > 2 && isset($zones[$domain[count($domain)-1]])) {
            if (isset($zones[$domain[count($domain)-1]][$domain[count($domain)-2]])) {
                return strlen($domain[count($domain)-3]);
            }
        } else if (count($domain) > 1) {
            return strlen($domain[1]);
        } else {
            return strlen($domain[0]);
        }
    }
    

    编辑:顺便说一句!看Get the second level domain of an URL (java)。据我所知,这里有您需要的答案(以及 special domains collection 的 url 收集为 Mozilla)。

    【讨论】:

      猜你喜欢
      • 2012-09-14
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 2012-05-25
      • 1970-01-01
      • 2011-05-04
      • 2019-05-12
      相关资源
      最近更新 更多