2009-07-17 16 views
5

I have $_SERVER['HTTP_REFERER'] — fingere che sia http://example.com/i/like/turtles.html. Cosa dovrei fare per ottenere solo la parte http://example.com dalla stringa e archiviarla nella sua variabile?Schema di estrazione e host da HTTP_REFERER

+1

Come sidenote, solo un'osservazione: il Referer non è sempre inviato dal client (che può essere disattivato, per esempio), e può essere falso Quindi, non basare alcuna funzionalità critica (né orientata alla sicurezza) su di essa! –

+0

@PascalMARTIN Consiglio sonoro. Ma, penso che si possa fare un caso per esaminare HTTP_REFERER in $ _SERVER (o, usando filter_input()/filter_input_array()) da una richiesta POST HTTP. –

risposta

15

In questo esempio, la soluzione migliore sarebbe quella di utilizzare PHP di parse_url method. Questo divide l'URL in un array associativo. Si potrebbe quindi costruire il vostro Valore finale combinando la scheme con la host:

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

userei parse_url nel modo seguente ...

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

Si potrebbe usare un'espressione regolare:

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

Oppure si potrebbe usare il parse_url function.