Возврат домена верхнего уровня с точкой в ​​конце в php

В основном проблема, с которой я сталкиваюсь, заключается в том, что мне нужно написать эту функцию, которая может принимать URL-адрес, например www.stackru.com, и просто возвращать "com". Но мне нужно иметь возможность возвращать одно и то же значение, даже если URL-адрес имеет точку в конце, например "www.stackru.com". Это то, что я до сих пор. Оператор if - это моя попытка вернуть точку в массиве до периода, но я не думаю, что правильно использую оператор if. В противном случае остальная часть кода выполняет именно то, что должна делать.

<?php
    function getTLD($domain)
    {

    $domainArray = explode("." , $domain);
    $topDomain = end($domainArray);
       if ($topDomain == " ")
       $changedDomain = prev(end($domainArray));
       return $changedDomain;

    return $topDomain;


    }
?>

3 ответа

Не используйте регулярные выражения для таких простых случаев, как это, это процессор дорогостоящий и нечитаемый. Просто удалите последнюю точку, если она существует:

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

Используйте регулярные выражения для чего-то вроде этого. Попробуй это:

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

Живой пример: http://codepad.org/km0vCkLz

Узнайте больше о регулярных выражениях и о том, как их использовать: http://www.regular-expressions.info/

end функция возвращает пустую строку "" (без пробелов). Вы сравниваете $topDomain в один пробел, поэтому if не оценивается как истина.

Также prev функция требует ввода массива и end($domainArray) возвращает строку, так что $changedDomain = prev(end($domainArray)) должен бросить E_WARNING,

поскольку end обновляет внутренний указатель массива $domainArray, который уже обновляется, когда вы звонили $topDomain = end($domainArray)Вам не нужно звонить end на $domainArray внутри if блок.

Пытаться:

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

Вот phpfiddle для этого.

Другие вопросы по тегам