PHP传出/外部链接

PHP传出/外部链接,php,external,Php,External,您好,我希望实现一个类似于DeviceArt上的功能,如果用户点击外部链接:例如: 实现这种特性的最佳方式是什么?从dA上的外观来看,他们只是编辑了所有的外部链接以获得http://www.deviantart.com/users/outgoing? 前缀,然后显示允许他们访问站点或返回的页面。因此,也许我需要实现一种方法来检查哪些链接不在当前域中,然后在它们前面加上一个特殊的url以显示跳板页面 或者可能只是将rel=external附加到链接中,然后不知何故,对于所有具有external r

您好,我希望实现一个类似于DeviceArt上的功能,如果用户点击外部链接:例如:

实现这种特性的最佳方式是什么?从dA上的外观来看,他们只是编辑了所有的外部链接以获得http://www.deviantart.com/users/outgoing? 前缀,然后显示允许他们访问站点或返回的页面。因此,也许我需要实现一种方法来检查哪些链接不在当前域中,然后在它们前面加上一个特殊的url以显示跳板页面

或者可能只是将rel=external附加到链接中,然后不知何故,对于所有具有external rel标记的链接,可以这样转到页面,或者可能显示一个显示相同消息的对话框


干杯

最好的方法是更改您的链接,其中新URL将是您自己的脚本,根据查询字符串重定向用户。如果要保持与DeviceArt相同的URL结构,请使用$\u SERVER['QUERY\u STRING']获取重定向脚本中的URL。

检测部分:如果链接是用户提供的可单击链接,则只需要这种装饰。您已经具备了将用户提供的链接转换为可点击链接的基础设施,否则,您将面临一个重大的安全问题,因此您需要做的就是将所有这些链接插入到装饰器函数中

装饰部分:让函数接受URL参数。如果论证的第一部分是http://your.domain.name,或者,如果它是一个相对链接,而不是以http:///之类的协议开头,请不要使用它。否则:

$url = "http://your.domain.name/outgoing.php?".urlencode($url);
这将确保正确转义原始URL中任何未受保护的字符


重定向部分:在outgoing.php脚本中,只需查看array\u keys$\u GET内部即可找到URL并显示相应的页面。

对于用户输入html,请使用正则表达式:

<\s*a\s+[^>]*href\s*=\s*[\"']?([^\"' >]+)[\"' >]
如果$2不是您的域之一,则需要重写href,因此在php中的第一个regexp strpo中找到$1的位置,并添加掩码url

http://yourdomain.com/maskurl?
查询字符串原样将是您要重定向到的url

另一方面,如果您正在打印带有给定url的链接,则只需传递第二个url


这里的第一个regexp:另一个是我写的,但是没有测试过。根据页面的生成方式,有几种方法可以实现这一点。如果所有链接都是由PHP生成的,那么通过比较链接的URL和站点的URL就可以很容易地完成。如果它们不同,请将您的passthrough页面前置到URL的开头,类似于DA的做法


我刚刚完成了一个脚本,在每个链接旁边添加外部链接图标,类似于Wikipedia的做法。对于这个特定的站点,我必须处理许多具有静态内容的页面。使用我上面提到的PHP方法,将不能很好地解决这个问题。相反,我用Javascript实现了一些东西。使用jQuery,我选择以http://或https://开头的所有锚定标记,然后循环检查每个锚定标记以检查域是否与我当前的匹配。如果不同,我会在链接旁边添加图标。您也可以做类似的操作,但可以使用passthrough页面预先添加锚的href。

优秀帮助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或 任何事

外部链接必须采用以下格式:

重要:

Robot从robots.txt中导出此php文件

它将与dA相同,只是:重定向是自动的

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