如何在PHP中删除URL中的http://、www和斜杠


How to remove http://, www and slash from URL in PHP?

我需要一个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
输入->谷歌网|输出->谷歌网

我检查了parse_url函数,但没有返回我需要的内容。由于我是PHP的初学者,这对我来说很困难。如果你有任何想法,请回答
提前Thanx。

$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

与所有示例输入正确配合使用。

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

我在下面发布了4种方法,从最短到最长,有很多方法可以从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

试试这个,它会删除你想要的内容(http://,www和尾部斜线),但会保留其他子域,如example.google.com

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

或者作为一行:

$host = preg_replace('/^(www'.)/i', '', parse_url('http://www.google.com', PHP_URL_HOST));
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等,您可能需要进行更多的检查,并包括其他部分。

$value = 'https://google.ca';
$result = str_ireplace('www.', '', parse_url($value, PHP_URL_HOST));
// google.ca

第一种方法是使用一个正则表达式来修剪URL中不必要的部分,如协议、www和结束斜杠

function trimUrlProtocol($url) {
    return preg_replace('/((^https?:'/'/)?(www'.)?)|('/$)/', '', trim($url));
}
echo trimUrlProtocol('http://sandbox.onlinephpfunctions.com/') . PHP_EOL;
echo trimUrlProtocol('https://sandbox.onlinephpfunctions.com/') . PHP_EOL;
echo trimUrlProtocol('http://www.sandbox.onlinephpfunctions.com/') . PHP_EOL;
echo trimUrlProtocol('https://www.sandbox.onlinephpfunctions.com/') . PHP_EOL;
echo trimUrlProtocol('http://sandbox.onlinephpfunctions.com') . PHP_EOL;
echo trimUrlProtocol('https://sandbox.onlinephpfunctions.com') . PHP_EOL;
echo trimUrlProtocol('http://www.sandbox.onlinephpfunctions.com') . PHP_EOL;
echo trimUrlProtocol('https://www.sandbox.onlinephpfunctions.com') . PHP_EOL;
echo trimUrlProtocol('sandbox.onlinephpfunctions.com') . PHP_EOL;

通过另一种方式,您可以使用parse_url,但您必须进行额外的检查来检查host部分是否存在,然后使用正则表达式来修剪www。只需使用第一种方式,它既简单又懒惰。

这将解释"http/https"www";和结束斜线

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

只需询问您是否需要帮助来理解正则表达式。

使用parse_url

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