2012-03-03 12 views
37

Mam pełne adresy URL jako ciągi, ale chcę usunąć http: // na początku ciągu, aby ładnie wyświetlić adres URL (np. Www.google.com z http://www.google.com)Regeks PHP do usunięcia http: // z ciągu

Czy ktoś może pomóc?

+3

Dlaczego potrzebujesz wyrazy regularne? Dlaczego po prostu nie usunąć pierwszych 7 znaków? –

+0

Sprawdź to: http://stackoverflow.com/questions/4875085/php-remove-http-from-link-title – stefandoorn

+0

@OliCharlesworth: Może zawierać 8 znaków z 'https: //' – Sarfraz

Odpowiedz

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

który będzie działał zarówno http:// i https://

+0

To wystarczy! Dzięki! – Casey

+0

@Casey: Nie ma za co – Sarfraz

+0

Pochodząc od kogoś, kto nie wie dużo o regex, było to jedno z najłatwiejszych do zrozumienia i wdrożenia rozwiązań tego problemu. –

1

Jeśli upierasz się przy użyciu regex:

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

Tylko ze względu na kompletność, dodałbym 's?' Po http. I tak, wiem, że nie było to w jego pytaniu. . . :)) –

+0

Dobry pomysł, zaktualizowany. – Overv

20

Nie potrzebujesz w ogóle wyrażenia regularnego. Zamiast tego użyj str_replace.

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

połączone w jednej operacji, co następuje:

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

Spowoduje to również usunięcie wszystkich pasujących fragmentów http: //, co może nie być problemem - ale może tak być.Na przykład, jeśli jest używany w ciągu zapytania bez prawidłowego urlencoding – aland

16

Lepiej użyj:

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

echo $url; 

prostsze i pracuje dla http://https://ftp:// i prawie wszystkich prefiksów.

+2

To jest poprawna odpowiedź! –

+1

ostateczna poprawna odpowiedź !! +50 –

+0

Cieszę się, że wam się podobało :) –

1

Aby usunąć http://domain (lub https) i uzyskać ścieżkę:

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

Tak, myślę, że str_replace() i substr() są szybsze i czystsze niż regex. Oto bezpieczna szybka funkcja dla niego. Łatwo jest zobaczyć, co dokładnie robi. Uwaga: zwracaj substr ($ url, 7) i substr ($ url, 8), jeśli chcesz również usunąć //.

// 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; 
} 
Powiązane problemy