2010-02-15 33 views
5

Tôi đang viết trình thu thập thông tin trang web bằng php và tôi đã có mã có thể trích xuất tất cả các liên kết từ một trang web. Sự cố: các trang web sử dụng kết hợp các url tuyệt đối và tương đối. Ví dụ (http thay thế bằng hxxp như tôi không thể đăng siêu liên kết):php chuyển đổi tất cả các liên kết thành url tuyệt đối

hxxp: //site.com/

site.com

site.com/index.php

hxxp: //site.com/hello/index.php

/hello/index.php

hxxp: //site2.com/index.php

site2.com/index.php

Tôi không kiểm soát được các liên kết (nếu chúng tuyệt đối/tương đối), nhưng tôi cần phải theo dõi chúng. Tôi cần phải chuyển đổi tất cả các liên kết này thành các URL tuyệt đối. Làm thế nào để làm điều này trong php?

+2

Bạn đang sử dụng gì để phân tích cú pháp html và tìm liên kết? Thư viện của bạn có thể đã có cách để giải quyết các url tương đối. –

+0

Tôi đang sử dụng chức năng trích xuất liên kết html của riêng mình. Tôi không sử dụng bất kỳ thư viện nào ngoại trừ các hàm curl và php. –

Trả lời

5

Dưới đây là một sự khởi đầu

// Your crawler was sent to this page. 
$url = 'http://example.com/page'; 

// Example of a relative link of the page above. 
$relative = '/hello/index.php'; 

// Parse the URL the crawler was sent to. 
$url = parse_url($url); 

if(FALSE === filter_var($relative, FILTER_VALIDATE_URL)) 
{ 
    // If the link isn't a valid URL then assume it's relative and 
    // construct an absolute URL. 
    print $url['scheme'].'://'.$url['host'].'/'.ltrim($relative, '/'); 
} 

Có một cái nhìn vào phương pháp http_build_url như một cách khác để tạo ra một neo tuyệt đối.

+1

một họ hàng cũng có thể là $ relative = '../hello/index.php'; – Francesco

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