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