2009-07-17 75 views
5

我有$_SERVER['HTTP_REFERER'] —假裝它是http://example.com/i/like/turtles.html。我需要做些什麼才能從字符串中獲得http://example.com部分,並將其存儲在自己的變量中?HTTP_REFERER提取方案和主機

+1

一點題外話,只是一句話:這樣,你會被schemehost結合建立你的最終值引用站點並不總是由客戶端發送(可以禁用它,例如),和它可以僞造。所以,不要把任何關鍵的功能(也不是以安全爲導向)放在它上面! – 2009-07-17 18:16:57

+0

@PascalMARTIN完好的建議。但是,我認爲可以通過HTTP POST請求來檢查$ _SERVER中的HTTP_REFERER(或使用filter_input()/ filter_input_array())。 – 2015-12-16 16:04:05

回答

15

在這個例子中,最好的解決辦法是使用PHP的parse_url method。這將URL分成一個關聯數組。

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

我會用下列方式parse_url ...

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

你可以使用正則表達式:

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

或者你可以使用parse_url function

相關問題