Получить URL-адрес базового веб-сайта

У меня есть текстовое поле на моем сайте, где люди могут отправлять URL-адреса. В большинстве случаев ввод неправильного URL выглядит так:

http://www.website.com?id=1
http://www.website.com/#/gls
http://www.website.com/post/test

Но я хочу, чтобы они указали свой базовый URL-адрес: http://www.website.com

Как я могу добиться этого, учитывая, что их URL-адрес хранится в $url переменная?

У меня есть некоторые идеи, но я не думаю, что это очень хорошее решение. Например я думал при разделении домена после «.» и после этого получить расширение домена как-то без остального кода useles.

1

Решение

Вы могли бы использовать parse_url вместо регулярного выражения, чтобы вынуть нужные вам части и сравнить их с тем, что они ввели, вот так:

// Get each part of the URL
$parts = parse_url($url);

// Rebuild the URL with only the scheme and domain (Without path, fragment, query string etc.)
$expected = $parts['scheme'] . '://' . $parts['host'];

// Compare the expected URL with what they user has entered.
if ($expected != $url) {
// Do something
}
2

Другие решения

Вы можете использовать PHP parse_url() функция с PHP_URL_HOST параметр.

Вот так:

parse_url($url, PHP_URL_HOST);

Это вернется www.example.com для URL http://www.example.com/test,

Кроме того, чтобы включить схему, вы можете попробовать следующее:

parse_url($url, PHP_URL_SCHEME) . "://" . parse_url($url, PHP_URL_HOST);

Это вернется http://www.example.com для URL http://www.example.com/test,


Если вы хотите использовать регулярные выражения (как вы предложили с тегом) о возврате раздела перед первым / (кроме того, в http://) или же # или же ?любой из которых являются недопустимыми символами в базовом URL? Любая часть URL после базы должна начинаться с одного из этих символов.

Вот так:

preg_match("/^http:\/\/[^\/\?\#]+/", $url)
2

Эта версия работает с https.

Первая скобка будет захватывать базовый URL.

preg_match("/^(https?:\/\/.+)(\/|#|\?|)/U", $url, $anArray)
// Access to the base url
$anArray[1]
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector