返回一个顶级域,在 php 中末尾有一个句点


Returning a top level domain with a period at the end in php

基本上我遇到的问题是我需要编写这个函数,它可以像 www.stackoverflow.com 这样的URL并返回"com"。但是我需要能够返回相同的值,即使 URL 末尾有一个句点,如"www.stackoverflow.com"。这就是我目前所拥有的。if 语句是我尝试在句点之前返回数组中的点,但我认为我没有正确使用 if 语句。否则,代码的其余部分完全按照应该做的事情执行。

<?php
    function getTLD($domain)
    {
    $domainArray = explode("." , $domain);
    $topDomain = end($domainArray);
       if ($topDomain == " ")
       $changedDomain = prev(end($domainArray));
       return $changedDomain;
    return $topDomain;

    }
?>

不要在这样的简单情况下使用正则表达式,它是 CPU 昂贵且不可读的。只需删除最后一个点(如果存在):

function getTLD($domain) {
    $domain = rtrim($domain, '.');
    return end(explode('.', $domain));
}

end 函数返回一个空字符串""(没有任何空格)。 您正在将$topDomain与单个空格字符进行比较,因此if的计算结果不是 true。

此外prev函数需要数组输入,并且end($domainArray)返回一个字符串,因此,$changedDomain = prev(end($domainArray))应该抛出一个E_WARNING

由于end更新了数组$domainArray的内部指针,当你调用$topDomain = end($domainArray)时已经更新了,所以你不需要在if块内部的$domainArray上调用end

尝试:

if ($topDomain == "") {
   $changedDomain = prev($domainArray);
   return $changedDomain; // Will output com
}

这是它的别名。

对类似的事情使用正则表达式。试试这个:

function getTLD($domain) {
    return preg_replace("/.*'.([a-z]+)'.?$/i", "$1", $domain );
}

一个活生生的例子:http://codepad.org/km0vCkLz

阅读有关正则表达式以及如何使用它们的更多信息:http://www.regular-expressions.info/