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?
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?
$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://
Jeśli upierasz się przy użyciu regex:
preg_match("/^(https?:\/\/)?(.+)$/", $input, $matches);
$url = $matches[0][2];
Tylko ze względu na kompletność, dodałbym 's?' Po http. I tak, wiem, że nie było to w jego pytaniu. . . :)) –
Dobry pomysł, zaktualizowany. – Overv
Dlaczego nie skorzystać parse_url
zamiast?
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);
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
Lepiej użyj:
$url = parse_url($url);
$url = $url['host'];
echo $url;
prostsze i pracuje dla http://
https://
ftp://
i prawie wszystkich prefiksów.
To jest poprawna odpowiedź! –
ostateczna poprawna odpowiedź !! +50 –
Cieszę się, że wam się podobało :) –
Aby usunąć http://domain (lub https) i uzyskać ścieżkę:
$str = preg_replace('#^https?\:\/\/([\w*\.]*)#', '', $str);
echo $str;
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;
}
Dlaczego potrzebujesz wyrazy regularne? Dlaczego po prostu nie usunąć pierwszych 7 znaków? –
Sprawdź to: http://stackoverflow.com/questions/4875085/php-remove-http-from-link-title – stefandoorn
@OliCharlesworth: Może zawierać 8 znaków z 'https: //' – Sarfraz