2010-11-05 69 views
0

您好我正在尋找實現類似的功能到上看到deviantART的,如果一個人點擊到一個外部鏈接:例如:http://www.deviantart.com/users/outgoing?http://driz.co.uk/PHP呼出/外部鏈接

什麼將是實現這種功能的最佳途徑?從dA的外觀上看,他們只需編輯所有的外部鏈接即可獲得前綴http://www.deviantart.com/users/outgoing?,然後顯示允許他們訪問網站或返回的頁面。因此,也許我需要實施一種方法來檢查哪些鏈接不在當前域上,然後在它們前面添加一個特殊的URL以顯示跳板頁面。

或者只是將rel="external"附加到鏈接,然後以某種方式爲所有具有外部rel標籤的鏈接轉到頁面,或者可能顯示一個對話框顯示相同的消息。

乾杯

回答

1

,最好的辦法是改變你的鏈接在新的URL將是你自己的腳本,重定向基於查詢字符串的用戶。如果您想保留與deviantArt相同的網址結構,請使用$_SERVER['QUERY_STRING']來抓取重定向腳本中的網址。

2

檢測部分:如果鏈接是用戶提供的可點擊鏈接,鏈接只需要這種裝飾。您已經擁有了將用戶提供的鏈接轉變爲可點擊鏈接的基礎設施(否則,您有一個重大的安全問題),因此您只需將所有這些鏈接插入裝飾器功能即可。

裝飾部分:有一個函數接受一個URL參數。如果參數的第一部分是「http://your.domain.name」,或者它是相對鏈接(不以http://之類的協議開始),請將其保留。否則:

$url = "http://your.domain.name/outgoing.php?".urlencode($url); 

這將確保原始URL中的任何未受保護的字符能夠正確轉義。

重定向部分:在outgoing.php腳本中,只需查看array_keys($_GET)以查找URL並顯示相應的頁面。

3

對於用戶輸入HTML使用正則表達式:

<\s*a\s+[^>]*href\s*=\s*[\"']?([^\"' >]+)[\"' >] 

其中$ a1將是在href,現在你可以測試反對:

(\w:\/{2})?([\w\.]+) 

如果$ 2不是你的領域之一,你需要重寫href,所以在第一個正則表達式中找到$ 1的位置(在php中strpos)並添加你的掩碼url

http://yourdomain.com/maskurl? 

原樣查詢字符串將是您想要重定向到的網址

另一方面,如果您打印的鏈接是給定的url,則只需要傳遞第二個鏈接。

這裏的第一個正則表達式:http://www.onaje.net/content/working-regular-expressions-href-url-extractor另一個是我寫的,但沒有測試過。

0

有幾種方法可以解決這個問題,具體取決於頁面的生成方式。如果所有鏈接都是由PHP生成的,那麼可以通過比較鏈接的URL和網站的鏈接來輕鬆完成。如果它們不同,請將您的passthough頁面添加到URL的開頭,類似於DA所做的。

我剛剛完成了一個腳本,在每個鏈接旁邊添加了外部鏈接圖標,類似於維基百科的做法。對於這個特定的網站,我不得不使用具有靜態內容的許多頁面。使用我上面提到的PHP方法,對此不太好。相反,我用Javascript實現了一些東西。使用jQuery,我選擇以「http://」或「https://」開頭的所有錨定標記,然後循環遍歷每個錨點標記以檢查域是否與當前匹配。如果不同,我會在鏈接旁邊添加圖標。你可以做類似的事情,但是在你的passthough頁面中加入錨點的href。

1

非常好的幫助Netcoder。這是重定向部分的完整的PHP:

<?php 

$redirect = $_SERVER['QUERY_STRING'].''; 

?> 

<html><head> 

<meta name="robots" content="noindex" /> 

<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"> 


<title>Your Page title</title> 

</head><body> 

your Site Content 

</body> 

<SCRIPT LANGUAGE="JavaScript"> 

setTimeout("location.href ='<?php echo $redirect ?>'",30); 

</script> 

</html> 

你的網站內容是要顯示的內容。 是在 秒之前等待重定向的時間。將其保存爲outgoing.php(或 任何東西)

外部鏈接必須是以下格式:http://your-nice-domain.com/outgoing.php?http://the-external-domain.com/external-path.any

重要

  1. 機器人出來,從這個robots.txt的PHP文件

  2. 它會和dA一樣,除了:重定向是自動的。

0
<?php 
$html = '<a href="http://google.com/somethingelsewhere">Something</a>' 
     . '<a href="http://example.com/somethinginmysite">My site!</a>'; 

echo preg_replace_callback('/<\s*a\s+[^>]*href\s*=\s*["\']?([^"\' >]+)["\' >]/', function($m) { 
    // initialise the data variable from your object 
    $link = $m[1]; 

    // early return 
    if(strpos($link, 'http://example') === 0) return $m[0]; 

    $linklen = strlen($m[1]); 
    $start = strlen($m[0]) - $linklen - 1; 

    $replacement = 'http://example.com/mymask?link=' . urlencode($link); 
    return substr_replace($m[0], $replacement, $start, $linklen); 
}, $html);