2012-02-20 31 views
36

Tôi cần một hàm php sản xuất tên miền thuần túy từ URL. Vì vậy, chức năng này phải được loại bỏ http://, www/ (cắt giảm) các phần từ URL nếu các phần này tồn tại. Dưới đây là ví dụ về đầu vào và đầu ra: Đầu vào ->http://www.google.com/ | Đầu ra -> google.com
Nhập ->http://google.com/ | Đầu ra -> google.com
Nhập -> www.google.com/ | Đầu ra -> google.com
Nhập -> google.com/ | Đầu ra -> google.com
Nhập -> google.com | Đầu ra -> google.com

Tôi đã kiểm tra chức năng parse_url, nhưng không trả lại những gì tôi cần. Vì tôi là người mới bắt đầu trong PHP, điều đó thật khó khăn đối với tôi. Nếu bạn có bất kỳ ý tưởng, xin vui lòng trả lời.
Thanx trước.Làm thế nào để loại bỏ http: //, www và cắt giảm từ URL trong PHP?

+4

Đây là một bản sao của hàng chục câu hỏi. – tplaner

+0

parse_url sẽ giữ nguyên tên miền đầy đủ, bao gồm tên miền phụ, ví dụ: nó không biến www.google.com thành chỉ google.com – Gordon

+1

Câu trả lời được xếp hạng cao thứ hai ở đây (http://stackoverflow.com/questions/276516/parsing-domain-from-url-in-php) có lẽ là đặt cược đơn giản nhất . – BenOfTheNorth

Trả lời

57
$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 

Hoạt động chính xác với tất cả các mục nhập mẫu của bạn.

+0

và điều gì sẽ xảy ra nếu không phải www nhưng secure.google.com? – Gordon

+0

Yeap, đó là những gì tôi cần. Cảm ơn rất nhiều! – JohnUS

+2

@Gordon: Câu hỏi đã nêu 'phải xóa http: //, www và /'. Các tên miền phụ tùy ý không phải là một phần của nó và sẽ không hoạt động nếu anh ta cần nó. – webbiedave

2

Hãy thử điều này, nó sẽ loại bỏ những gì bạn muốn (http :: //, www và trailing slash) nhưng sẽ giữ lại các tên miền phụ khác như example.google.com

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

và điều gì sẽ xảy ra nếu không phải www nhưng secure.google.com? – Gordon

+0

OP được yêu cầu cụ thể để có http: //, www và dấu gạch chéo bị xóa, do đó giải pháp của tôi chỉ loại bỏ chúng. Các giải pháp khác có thể phức tạp hơn nhiều và có thể sẽ cần một cơ sở dữ liệu về ngoại lệ, các miền .uk, .tw sẽ là ví dụ gây ra sự cố. – h00ligan

3
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]); 

này sẽ quay trở lại miền cấp thứ hai, mặc dù nó sẽ là vô ích cho các tên miền .com nói, vì vậy bạn có thể muốn làm một số kiểm tra hơn, và bao gồm các phần bổ sung nếu strrev ($ host [0]) là uk, au, v.v.

8

Có rất nhiều cách lấy miền ra khỏi url tôi đã đăng 4 cách dưới đây bắt đầu từ ngắn nhất đến dài nhất.

# 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'); 

Tất cả các chức năng trên trả lại phản ứng như nhau: example.com

23
$str = 'http://www.google.com/'; 
$str = preg_replace('#^https?://#', '', rtrim($str,'/')); 
echo $str; // www.google.com 
Các vấn đề liên quan