我需要一个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