2010-11-05 7 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 был бы сценарий самостоятельно, который перенаправляет пользователей на основе строки запроса. Если вы хотите сохранить ту же структуру URL-адресов, что и deviantArt, используйте $_SERVER['QUERY_STRING'], чтобы захватить URL-адрес в вашем скрипте перенаправления.

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*[\"']?([^\"' >]+)[\"' >] 

где $ 1 будет HREF, теперь вы можете проверить против:

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

если $ 2 не один из ваших доменов, нужно переписать HREF, поэтому найти положение $ 1 в первом регулярном выражении (StrPos в PHP) и добавьте ваш маска URL

http://yourdomain.com/maskurl? 

Строка запроса как есть будет URL, который вы хотите перенаправить на

С другой стороны, если вы печатаете ссылки с заданным URL-адресом, вам нужно передать только второй.

Первое регулярное выражение отсюда: http://www.onaje.net/content/working-regular-expressions-href-url-extractor и другое было написано мной, но не проверено.

0

Есть несколько способов, которыми вы могли бы приблизиться к этому, в зависимости от того, как создаются страницы. Если все ссылки генерируются PHP, то это можно легко сделать, сравнив URL-адрес ссылки с ссылкой на сайт. Если они разные, добавьте страницу passthough в начало URL-адреса, аналогично тому, как это сделал DA.

Я только что закончил скрипт, чтобы добавить значки внешних ссылок рядом с каждой ссылкой, подобно тому, как это делает Wikipedia. Для этого конкретного сайта мне приходилось работать со многими страницами, содержащими статический контент. Используя метод PHP, о котором я упоминал выше, для этого не получится. Вместо этого я реализовал что-то в Javascript. Используя jQuery, я выбираю все теги привязки, которые начинаются с «http: //» или «https: //», затем я просматриваю каждую из них, чтобы проверить, соответствует ли домен моей текущей. Если он отличается, я добавляю значок рядом со ссылкой. Вы можете сделать подобное, но вместо этого добавьте href привязки с вашей страницей passthough.

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. Робот из этого файла PHP с помощью файла robots.txt

  2. Будет таким же, как и за исключением: перенаправление осуществляется автоматически.

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);