2009-07-17 30 views
5

Tôi có $_SERVER['HTTP_REFERER'] — giả vờ là http://example.com/i/like/turtles.html. Tôi sẽ cần phải làm gì để chỉ lấy một phần của chuỗi http://example.com và lưu trữ nó trong biến riêng của nó?Chương trình trích xuất và lưu trữ từ HTTP_REFERER

+1

Là một sidenote, chỉ là một nhận xét: Referer không phải luôn luôn gửi của khách hàng (nó có thể bị vô hiệu hóa, ví dụ), và nó có thể bị giả mạo. Vì vậy, không căn cứ bất kỳ chức năng quan trọng nào (cũng như định hướng bảo mật) trên đó! –

+0

@PascalMARTIN Lời khuyên âm thanh. Nhưng, tôi nghĩ rằng một trường hợp có thể được thực hiện để kiểm tra HTTP_REFERER trong $ _SERVER (hoặc, bằng cách sử dụng filter_input()/filter_input_array()) từ một yêu cầu HTTP POST. –

Trả lời

15

Trong ví dụ này, giải pháp tốt nhất là nên sử dụng PHP parse_url method. Điều này chia URL thành một mảng kết hợp. Sau đó bạn sẽ xây dựng giá trị cuối cùng của bạn bằng cách kết hợp scheme với host:

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

Tôi muốn sử dụng parse_url theo cách sau ...

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

Bạn có thể sử dụng một biểu thức chính quy:

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

Hoặc bạn có thể sử dụng parse_url function.

Các vấn đề liên quan