Как удалить http://, www и slash из URL-адреса в PHP?

Мне нужна функция php, которая выдает чистое имя домена из URL. Таким образом, эта функция должна удалять части http://, www и / (slash) из URL, если эти части существуют. Вот пример ввода и вывода: Вход → http://www.google.com/ | Результат → google.com
Вход → http://google.com/ | Результат → google.com
Вход → www.google.com/| Результат → google.com
Вход → google.com/| Результат → google.com
Вход → google.com | Вывод → google.com

Я проверил функцию parse_url, но не возвратил то, что мне нужно. Поскольку я начинаю работать на PHP, мне было сложно. Если у вас есть какие-либо идеи, ответьте.
Thanx заранее.

Ответ 1

$input = 'www.google.co.uk/';

// in case scheme relative URI is passed, e.g., //www.google.com/
$input = trim($input, '/');

// If scheme not included, prepend it
if (!preg_match('#^http(s)?://#', $input)) {
    $input = 'http://' . $input;
}

$urlParts = parse_url($input);

// remove www
$domain = preg_replace('/^www\./', '', $urlParts['host']);

echo $domain;

// output: google.co.uk

Правильно работает со всеми вашими примерами ввода.

Ответ 2

$str = 'http://www.google.com/';
$str = preg_replace('#^https?://#', '', rtrim($str,'/'));
echo $str; // www.google.com

Ответ 3

Есть много способов захватить домен из URL-адреса, который я опубликовал, начиная с кратчайшего до самого длинного пути.

# 1

function urlToDomain($url) {
   return implode(array_slice(explode('/', preg_replace('/https?:\/\/(www\.)?/', '', $url)), 0, 1));
}
echo urlToDomain('http://www.example.com/directory/index.php?query=true');

# 2

function urlToDomain($url) {
   $domain = explode('/', preg_replace('/https?:\/\/(www\.)?/', '', $url));
   return $domain['0'];
}
echo urlToDomain('http://www.example.com/directory/index.php?query=true');

# 3

function urlToDomain($url) {
   $domain = preg_replace('/https?:\/\/(www\.)?/', '', $url);
   if ( strpos($domain, '/') !== false ) {
      $explode = explode('/', $domain);
      $domain  = $explode['0'];
   }
   return $domain;
}
echo urlToDomain('http://www.example.com/directory/index.php?query=true');

# 4

function urlToDomain($url) {
   if ( substr($url, 0, 8) == 'https://' ) {
      $url = substr($url, 8);
   }
   if ( substr($url, 0, 7) == 'http://' ) {
      $url = substr($url, 7);
   }
   if ( substr($url, 0, 4) == 'www.' ) {
      $url = substr($url, 4);
   }
   if ( strpos($url, '/') !== false ) {
      $explode = explode('/', $url);
      $url     = $explode['0'];
   }
   return $url;
}
echo urlToDomain('http://www.example.com/directory/index.php?query=true');

Все вышеперечисленные функции возвращают один и тот же ответ: example.com

Ответ 4

if (!preg_match('/^http(s)?:\/\//', $url))
    $url = 'http://' . $url;

$host = parse_url($url, PHP_URL_HOST);
$host = explode('.', strrev($host));
$host = strrev($host[1]) . '.' strrev($host[0]);

Это вернет домен второго уровня, хотя было бы бесполезно говорить о доменах .co.uk, поэтому вы можете сделать еще несколько проверок и включить дополнительные части, если strrev ($ host [0]) - uk, au, и т.д.

Ответ 5

Попробуйте это, он удалит то, что вы хотели (http:://, www и trailing slash), но сохранит другие поддомены, такие как example.google.com

$host = parse_url('http://www.google.com', PHP_URL_HOST);
$host = preg_replace('/^(www\.)/i', '', $host);