2010-12-05 11 views
25
entrada del usuario

Ejemplo¿Cómo se quita http, https y la barra de la entrada del usuario en php

http://domain.com/ 
http://domain.com/topic/ 
http://domain.com/topic/cars/ 
http://www.domain.com/topic/questions/ 

Quiero una función php para que la salida como

domain.com 
domain.com/topic/ 
domain.com/topic/cars/ 
www.domain.com/topic/questions/ 

Avísame :)

+0

Typo anterior con 'c.om' que debe ser' .com'. No puedo sugerir una edición porque el sistema muestra "Las ediciones deben tener al menos 6 caracteres"; ... –

Respuesta

22

Debe utilizar un conjunto de términos "no permitidas" y utilizar strpos y str_replace para eliminar de forma dinámica desde el pasado en la URL:

function remove_http($url) { 
    $disallowed = array('http://', 'https://'); 
    foreach($disallowed as $d) { 
     if(strpos($url, $d) === 0) { 
     return str_replace($d, '', $url); 
     } 
    } 
    return $url; 
} 
+0

genial ... ¿qué tal si tienes sub.domain.com sin barra? – Blur

+0

@blur Esto retornará correctamente si la cadena no contiene ninguna de las cadenas "no permitidas". –

+1

¿Qué sucede si la URL es algo así como: 'http: //domain.com/topic/https: // more /'? Esa es una url válida con una ruta válida, pero este enfoque lo trastornaría de una manera que (creo) el OP no tenía la intención. – Lee

-2

encontrado este http://refactormycode.com/codes/598-remove-http-from-url-string

function remove_http($url = '') 
{ 
    if ($url == 'http://' OR $url == 'https://') 
    { 
     return $url; 
    } 
    $matches = substr($url, 0, 7); 
    if ($matches=='http://') 
    { 
     $url = substr($url, 7);  
    } 
    else 
    { 
     $matches = substr($url, 0, 8); 
     if ($matches=='https://') 
     $url = substr($url, 8); 
    } 
    return $url; 
} 
+0

Este es un enfoque realmente ineficiente para un problema simple – Madbreaks

-1

Usted podría usar la funcionalidad de Parse url de PHP. Esto funcionará para todos los protocolos, incluso ftp: // o https: //

eiter obtener el componente de protocolo y SUBSTR que desde la dirección URL, o simplemente concatenar las otras piezas de nuevo juntos ...

http://php.net/manual/de/function.parse-url.php

2

puede eliminar tanto HTTPS y HTTP en una línea usando ereg_replace:

$url = ereg_replace("(https?)://", "", $url); 
78

ereg_replace ahora es obsoleto, por lo que es mejor usar:

$url = preg_replace("(^https?://)", "", $url); 

Esto elimina ya sea http:// o https://

+8

"(^ https?: //)" para el comienzo de la cadena – igor

18

me gustaría sugerir el uso de las herramientas PHP te di, echar un vistazo a parse_url.

<?php 
$url = 'http://username:[email protected]/path?arg=value#anchor'; 

print_r(parse_url($url)); 

echo parse_url($url, PHP_URL_PATH); 
?> 

El resultado del ejemplo sería:

Array 
(
    [scheme] => http 
    [host] => hostname 
    [user] => username 
    [pass] => password 
    [path] => /path 
    [query] => arg=value 
    [fragment] => anchor 
) 
/path 

Parece que usted está después de, al menos, host + path (añadir otras, según sea necesario, por ejemplo query):

$parsed = parse_url('http://www.domain.com/topic/questions/'); 

echo $parsed['host'], $parsed['path']; 

    > www.domain.com/topic/questions/ 

Saludos

+0

+1 por mencionar 'parse_url' – mate64

+0

¿qué hay de fragmento y consulta? el cartel no dice explícitamente que se eliminen. –

+0

@KimStacks Supongo que op puede averiguarlo por lo que publiqué, pero en el espíritu de ser pedante, he actualizado mi respuesta ligeramente. – Madbreaks

-1

Acabo de tener esta misma pregunta un poco b Hace mucho pero esto funciona mejor realmente:

$url = preg_replace("(https?://)", "", $url); 

Muy limpio y eficiente.

+0

Explica por qué recibí un comentario negativo sobre esto .... – griff4594

+2

No fui yo el que votó pero creo que tal vez tu código eliminará 'http: //' de cualquier parte de la url y no solo al principio. – amosmos

-1
<?php 
// user input 
$url = 'http://www.example.com/category/website/wordpress/wordpress-security/'; 
$url0 = 'http://www.example.com/'; 
$url1 = 'http://www.example.com/category/'; 
$url2 = 'http://www.example.com/category/website/'; 
$url3 = 'http://www.example.com/category/website/wordpress/'; 

// print_r(parse_url($url)); 
// echo parse_url($url, PHP_URL_PATH); 

$removeprotocols = array('http://', 'https://'); 

echo '<br>' . str_replace($removeprotocols,"",$url0); 
echo '<br>' . str_replace($removeprotocols,"",$url1); 
echo '<br>' . str_replace($removeprotocols,"",$url2); 
echo '<br>' . str_replace($removeprotocols,"",$url3); 

?> 
Cuestiones relacionadas