Как Вы разделяете доменное имя от URL в php?

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
46
задан qasimzee 31 July 2013 в 08:39
поделиться

4 ответа

parse_url превращает URL в ассоциативный массив:

php > $foo = "http://www.example.com/foo/bar?hat=bowler&accessory=cane";
php > $blah = parse_url($foo);
php > print_r($blah);
Array
(
    [scheme] => http
    [host] => www.example.com
    [path] => /foo/bar
    [query] => hat=bowler&accessory=cane
)
99
ответ дан NDM 26 November 2019 в 20:10
поделиться

Можно использовать parse_url () , чтобы сделать это:

$url = 'http://www.example.com';
$domain = parse_url($url, PHP_URL_HOST);
$domain = str_replace('www.','',$domain);

В этом примере, $domain должен содержать example.com, независимо от него имеющий www или нет. Это также работает на домен, такой как .co.uk

12
ответ дан Good Muyis 26 November 2019 в 20:10
поделиться

Можно также записать регулярное выражение для получения точно, что Вы хотите.

Вот моя попытка его:

$pattern = '/\w+\..{2,3}(?:\..{2,3})?(?:$|(?=\/))/i';
$url = 'http://www.example.com/foo/bar?hat=bowler&accessory=cane';
if (preg_match($pattern, $url, $matches) === 1) {
    echo $matches[0];
}

вывод:

example.com

Этот шаблон также учитывает домены, такие как 'example.com.au'.

Примечание: Я не консультировался с соответствующим RFC.

10
ответ дан firstresponder 26 November 2019 в 20:10
поделиться

Я некоторое время размышлял о том, имеет ли смысл использовать для этого регулярное выражение, но, в конце концов, думаю, что нет. Регулярное выражение

firstresponder было близко к тому, чтобы убедить меня, что это лучший способ, но оно не сработало ни с чем без косой черты в конце (например, http://example.com ). Я исправил это следующим образом: '/ \ w + \ .. {2,3} (?: \ .. {2,3})? (? = [\ / \ W]) / i' , но потом я понял, что дважды соответствует URL-адресам вроде ' http://example.com/index.htm '. Ой. Это было бы не так уж плохо (просто используйте первый), но он также соответствует дважды примерно так: ' http://abc.ed.fg.hij.kl.mn/ ', и первый матч не тот. : (

Сотрудник предложил просто получить хост (через parse_url () ), а затем просто взять последние два или три бита массива ( split () на ' . ') Два или три будут основаны на списке доменов, например' co.uk 'и т. Д. Составление этого списка становится сложной частью.

0
ответ дан 26 November 2019 в 20:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: