Возврат домена верхнего уровня с точкой в конце в 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 для этого.