2009-07-17 11 views
5

Tengo $_SERVER['HTTP_REFERER'] — pretendo que es http://example.com/i/like/turtles.html. ¿Qué tendría que hacer para obtener solo la parte http://example.com de la cadena, y almacenarla en su propia variable?Esquema de extracto y host de HTTP_REFERER

+1

Como anotación al margen, sólo una observación: El árbitro no siempre es enviado por el cliente (que se puede desactivar, por ejemplo), y puede ser fingido ¡Por lo tanto, no basas ninguna funcionalidad fundamental (ni orientada a la seguridad) en ella! –

+0

@PascalMARTIN Consejo de sonido. Pero, creo que se podría hacer un caso para examinar HTTP_REFERER en $ _SERVER (o, usando filter_input()/filter_input_array()) desde una solicitud HTTP POST. –

Respuesta

15

En este ejemplo, la mejor solución sería utilizar PHP de parse_url method. Esto divide la URL en una matriz asociativa. A continuación, construir su valor final mediante la combinación de la scheme con el host:

if ($parts = parse_url("http://example.com/i/like/turtles.html")) { 
    echo $parts[ "scheme" ] . "://" . $parts[ "host" ]; 
} 
13

que haría uso de parse_url de la siguiente manera ...

if ($urlParts = parse_url($myURI)) 
    $baseUrl = $urlParts["scheme"] . "://" . $urlParts["host"]; 
2

Se podría utilizar una expresión regular:

if (isset($_SERVER['HTTP_REFERER']) && preg_match('@^[^/]+://[^/][email protected]', $_SERVER['HTTP_REFERER'], $match)) { 
    var_dump($match[0]); 
} 

O usted podría utilizar el parse_url function.