Исходящая / Внешняя ссылка PHP - PullRequest
0 голосов
/ 05 ноября 2010

Привет, я ищу возможность реализовать функцию, подобную той, которая появилась на deviantART, если человек нажимает на внешнюю ссылку: пример: http://www.deviantart.com/users/outgoing?http://driz.co.uk/

Каков наилучший способ реализации такой функции?Судя по всему на dA, они просто редактируют все внешние ссылки, чтобы иметь префикс http://www.deviantart.com/users/outgoing?, а затем показывают ту страницу, которая позволяет им посетить сайт или вернуться.Так что, возможно, мне нужно каким-то образом реализовать способ проверить, какие ссылки НЕ находятся в текущем домене, а затем добавить к ним префикс со специальным URL, чтобы показать страницу ступеньки.

Или, возможно, просто добавив rel="external"к ссылкам, а затем каким-то образом для всех ссылок, которые имеют тег rel внешнего, перейдите на страницу, подобную этой, или, возможно, покажите диалоговое окно с тем же сообщением.

Cheers

Ответы [ 6 ]

3 голосов
/ 05 ноября 2010

Для ввода пользователем 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, а другое написано мной, но не проверено.

2 голосов
/ 05 ноября 2010

Обнаружение: ссылка требует такого оформления только в том случае, если она предоставлена ​​пользователем, кликабельная ссылка.У вас уже есть инфраструктура для превращения предоставленных пользователем ссылок в интерактивные ссылки (в противном случае у вас есть серьезная проблема безопасности), поэтому все, что вам нужно сделать, это подключить все эти ссылки к функции декоратора.

Часть декора: есть функция, принимающая аргумент URL.Если первой частью аргумента является «http://your.domain.name",» или это относительная ссылка (не начинается с протокола, подобного http://),, оставьте его в покое. В противном случае:

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

Это обеспечит защиту любого незащищенногосимволы в исходном URL-адресе должным образом экранированы.

Часть перенаправления: в скрипте outgoing.php просто загляните внутрь array_keys($_GET), чтобы найти URL-адрес и отобразить соответствующую страницу.

1 голос
/ 07 августа 2011

Отличная помощь 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>

Содержимое вашего сайта - это то, что вы хотите показать. 30 - это время в секундах ожидания перед перенаправлением.Сохраните его как outgoing.php (или что-нибудь еще)

Внешняя ссылка должна быть в следующем формате: http://your -nice-domain.com / outgoing.php? http://the -external-domain.com/external-path.any

Важно :

  1. Робот этот файл php из robots.txt

  2. Это будет то же самое, что и дА, за исключением: перенаправление происходит автоматически.

1 голос
/ 05 ноября 2010

Лучшим способом было бы изменить ваши ссылки, где новый URL будет вашим собственным скриптом, который перенаправляет пользователей на основе строки запроса.Если вы хотите сохранить ту же структуру URL, что и deviantArt, используйте $_SERVER['QUERY_STRING'], чтобы получить URL в сценарии перенаправления.

0 голосов
/ 19 февраля 2015
<?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);
0 голосов
/ 06 ноября 2010

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

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

...