2012-03-03 12 views
37

Tengo las URL completas como cadenas, pero quiero eliminar el http: // al comienzo de la cadena para mostrar la URL correctamente (por ejemplo: www.google.com en su lugar de http://www.google.com)PHP Regex para eliminar http: // de la cadena

¿Alguien puede ayudar?

+3

¿Por qué necesita una expresión regular? ¿Por qué no simplemente eliminar los primeros 7 caracteres? –

+0

Verifique este: http://stackoverflow.com/questions/4875085/php-remove-http-from-link-title – stefandoorn

+0

@OliCharlesworth: también puede contener 8 caracteres con 'https: //' – Sarfraz

Respuesta

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

que funcione para ambos http:// y https://

+0

¡Eso hizo el truco! ¡Gracias! – Casey

+0

@Casey: De nada – Sarfraz

+0

Viniendo de alguien que no sabe mucho acerca de la expresión regular, esta fue una de las soluciones más fáciles de entender e implementar para este problema, muchas gracias. –

1

Si usted insiste en el uso de expresiones regulares:

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

Solo para completar, agregaría un 's?' Después del http. Y sí, sé que no estaba en su pregunta. . . :)) –

+0

Buena idea, actualizada. – Overv

20

No necesita expresión regular en absoluto. Use str_replace en su lugar.

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

combinan en una sola operación de la siguiente manera:

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

Esto también eliminará cualquier coincidencia posterior de http (s): //, lo que puede no ser un problema, pero podría ser.Por ejemplo, si se usa en una cadena de consulta sin urlencoding apropiado – aland

16

Mejor uso esto:

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

echo $url; 

simple y funciona para http://https://ftp:// y casi todos los prefijos.

+2

¡Esta es la respuesta correcta! –

+1

última respuesta correcta !! +50 –

+0

Así que me alegro de que les haya gustado :) –

1

Para eliminar http://domain (o https) y para obtener la ruta:

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

sí, creo que str_replace() y substr() son más rápidos y más limpio que la expresión regular. Aquí hay una función rápida segura para ello. Es fácil ver exactamente lo que hace. Nota: return substr ($ url, 7) y substr ($ url, 8), si también desea eliminar el //.

// 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; 
} 
Cuestiones relacionadas