Как удалить http://, www и косую черту из URL в PHP? - PullRequest
38 голосов
/ 20 февраля 2012

Мне нужна функция php, которая выдает чистое доменное имя из URL. Таким образом, эта функция должна удалять части http://, www и / (косая черта) из 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, мне было трудно. Если у вас есть идеи, пожалуйста, ответьте.
Спасибо заранее.

Ответы [ 8 ]

65 голосов
/ 20 февраля 2012
$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

Работает корректно со всеми примерами ввода.

26 голосов
/ 11 ноября 2013
$str = 'http://www.google.com/';
$str = preg_replace('#^https?://#', '', rtrim($str,'/'));
echo $str; // www.google.com
9 голосов
/ 01 сентября 2013

Существует множество способов получить домен из URL-адреса, который я разместил 4 способами ниже, начиная с самого короткого до самого длинного.

# 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 голосов
/ 20 февраля 2012

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

$host = parse_url('http://www.google.com', PHP_URL_HOST);
$host = preg_replace('/^(www\.)/i', '', $host);
3 голосов
/ 20 февраля 2012
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 и т. д.

1 голос
/ 20 февраля 2012

Использовать parse_url

http://www.php.net/manual/en/function.parse-url.php

0 голосов
/ 24 апреля 2019

это будет учитывать http / https и www и конечный слеш

$str = 'https://www.google.com/';
$str = preg_replace('#(^https?:\/\/(w{3}\.)?)|(\/$)#', '', $str);
echo $str; // www.google.com

Просто спросите, нужна ли вам помощь в понимании регулярного выражения.

0 голосов
/ 17 марта 2019
$value = 'https://google.ca';
$result = str_ireplace('www.', '', parse_url($value, PHP_URL_HOST));
// google.ca
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...