2012-03-03 29 views
37

Tôi có URL đầy đủ dưới dạng chuỗi, nhưng tôi muốn xóa http: // ở đầu chuỗi để hiển thị URL độc đáo (ví dụ: www.google.com.vn của http://www.google.com)PHP Regex để xóa http: // khỏi chuỗi

Ai đó có thể trợ giúp?

+3

Tại sao bạn cần regex? Tại sao không chỉ xóa 7 ký tự đầu tiên? –

+0

Kiểm tra điều này: http://stackoverflow.com/questions/4875085/php-remove-http-from-link-title – stefandoorn

+0

@OliCharlesworth: Nó có thể là 8 ký tự cũng như với 'https: // ' – Sarfraz

Trả lời

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

Điều đó sẽ làm việc cho cả hai http://https://

+0

Điều đó đã làm được điều đó! Cảm ơn! – Casey

+0

@Casey: Bạn được chào đón – Sarfraz

+0

Đến từ một người không biết nhiều về regex, đây là một trong những cách dễ nhất để hiểu và thực hiện các giải pháp cho vấn đề này, cảm ơn một nhóm. –

1

Nếu bạn nhấn mạnh vào việc sử dụng RegEx:

preg_match("/^(https?:\/\/)?(.+)$/", $input, $matches); 
$url = $matches[0][2]; 
+2

Chỉ vì lợi ích của sự hoàn chỉnh, tôi sẽ thêm một 's? 'Sau http. Và vâng, tôi biết đó không phải là câu hỏi của anh ấy. . . :)) –

+0

Ý tưởng hay, cập nhật. – Overv

20

Bạn không cần biểu thức chính quy nào cả. Sử dụng str_replace để thay thế.

str_replace('http://', '', $subject); 
str_replace('https://', '', $subject); 

Kết hợp thành một hoạt động đơn lẻ như sau:

str_replace(array('http://','https://'), '', $urlString); 
+3

Điều này cũng sẽ loại bỏ bất kỳ kết quả phù hợp sau của http (s): //, mà có thể không phải là một vấn đề - nhưng nó có thể được.Ví dụ, nếu nó được sử dụng trong một chuỗi truy vấn mà không có urlencoding thích hợp – aland

16

Better sử dụng này:

$url = parse_url($url); 
$url = $url['host']; 

echo $url; 

đơn giản và làm việc cho http://https://ftp:// và gần như tất cả tiền tố.

+2

Đây là câu trả lời đúng! –

+1

câu trả lời đúng cuối cùng !! +50 –

+0

Rất vui khi các bạn thích nó :) –

1

Để loại bỏ http://domain (hoặc https) và để có được đường dẫn:

$str = preg_replace('#^https?\:\/\/([\w*\.]*)#', '', $str); 
    echo $str; 
0

Yeah, tôi nghĩ rằng str_replace() và substr() là nhanh hơn và sạch hơn so với regex. Đây là một chức năng nhanh chóng an toàn cho nó. Thật dễ dàng để xem chính xác những gì nó làm. Lưu ý: trả về substr ($ url, 7) và substr ($ url, 8), nếu bạn cũng muốn xóa //.

// slash-slash protocol remove https:// or http:// and leave // - if it's not a string starting with https:// or http:// return whatever was passed in 
function universal_http_https_protocol($url) { 
    // Breakout - give back bad passed in value 
    if (empty($url) || !is_string($url)) { 
    return $url; 
    } 

    // starts with http:// 
    if (strlen($url) >= 7 && "http://" === substr($url, 0, 7)) { 
    // slash-slash protocol - remove https: leaving // 
    return substr($url, 5); 
    } 
    // starts with https:// 
    elseif (strlen($url) >= 8 && "https://" === substr($url, 0, 8)) { 
    // slash-slash protocol - remove https: leaving // 
    return substr($url, 6); 
    } 

    // no match, return unchanged string 
    return $url; 
} 
Các vấn đề liên quan