2012-03-17 30 views
6

Tôi yêu cầu mã nguồn của một trang web như thế này:Hãy liên kết tương đối vào những người tuyệt đối

<? $txt = file_get_contents('http://stats.pingdom.com/qmwwuwoz2b71/522741'); 
echo $txt; ?> 

Bu Tôi muốn thay thế các liên kết tương đối với những người thân tuyệt đối! Về cơ bản,

<img src="/images/legend_15s.png"/> and <img src='/images/legend_15s.png'/> 

nên được thay thế bởi

<img src="http://domain.com/images/legend_15s.png"/> 

<img src='http://domain.com/images/legend_15s.png'/> 

tương ứng. Tôi có thể làm cái này như thế nào?

Trả lời

7

Mã này thay thế chỉ định các link và hình ảnh:

<? $txt = file_get_contents('http://stats.pingdom.com/qmwwuwoz2b71/522741'); 
$txt = str_replace(array('href="', 'src="'), array('href="http://stats.pingdom.com/', 'src="http://stats.pingdom.com/'), $txt); 
echo $txt; ?> 

tôi đã thử nghiệm và làm việc của mình :)

CẬP NHẬT

đây được thực hiện với biểu hiện thường xuyên và làm việc tốt hơn:

<? $txt = file_get_contents('http://stats.pingdom.com/qmwwuwoz2b71/522741'); 
$domain = "http://stats.pingdom.com"; 
$txt = preg_replace("/(href|src)\=\"([^(http)])(\/)?/", "$1=\"$domain$2", $txt); 
echo $txt; ?> 

Xong : D

9

này có thể đạt được như sau:

<?php 
$input = file_get_contents('http://stats.pingdom.com/qmwwuwoz2b71/522741'); 

$domain = 'http://stats.pingdom.com/'; 
$rep['/href="(?!https?:\/\/)(?!data:)(?!#)/'] = 'href="'.$domain; 
$rep['/src="(?!https?:\/\/)(?!data:)(?!#)/'] = 'src="'.$domain; 
$rep['/@import[\n+\s+]"\//'] = '@import "'.$domain; 
$rep['/@import[\n+\s+]"\./'] = '@import "'.$domain; 
$output = preg_replace(
    array_keys($rep), 
    array_values($rep), 
    $input 
); 

echo $output; 
?> 

mà sẽ liên kết đầu ra như sau:

/cái gì đó

sẽ trở thành,

http://stats.pingdom.com//something

../something

sẽ trở thành,

http://stats.pingdom.com/../something

Nhưng nó sẽ không chỉnh sửa "dữ liệu: image/pn g; " hoặc gắn thẻ.

Tôi chắc chắn rằng các biểu thức chính quy có thể được cải thiện.

+0

Tôi thích điều này! Cảm ơn bạn đã viết nó. Thông minh để đưa các tham số preg_replace vào các phím. Tôi đã thực hiện điều này để đáp ứng yêu cầu tính năng người dùng để thiết lập các liên kết tuyệt đối trong plugin của tôi tạo bản sao tĩnh của các trang web Grav. Điều đó nói rằng, nếu bất cứ ai tìm thấy một vấn đề với nó, tôi sẽ cố gắng để báo cáo lại ở đây về nó để người dùng trong tương lai sẽ có một bản sao tốt hơn. – BarryMode

1

Bạn không cần php, bạn chỉ cần sử dụng thẻ căn cứ html5, và đặt mã php của bạn trong nội dung html, bạn chỉ cần phải làm như Ví dụ sau đây:

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Document</title> 
    <base href="http://yourdomain.com/"> 
</head> 
<body> 
<? $txt = file_get_contents('http://stats.pingdom.com/qmwwuwoz2b71/522741'); 
echo $txt; ?> 
</body> 
</html> 

và tất cả các file sẽ sử dụng url tuyệt đối

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