什么是l.php
我记住了一些事情。像我猜猜l.php是link.php Facebook的。它是预先重定向的 脚本。 Facebook上的每个链接都是 过滤到link.php?到= link
制作渲染类或使用正则表达式过滤输入,找到 www.link.com 然后将其更改为<a href="http://www.oursite.php?to=www.link.com">link</a>
,问题是我们有什么更改,如果我们更改了某些内容,那么我们所有的归档链接都无法正常工作(假设我们将输入放入数据库中。)。
使用JavaScript来做到这一点,我的意思是,但我不熟悉js,但我知道我们可以像上面一样搜索和更改链接。但问题是用户没有js,(移动或没有JavaScript插件等)
或者你有更好的答案我们植入l.php的最佳方式是什么?
答案 0 :(得分:2)
这将是使用函数在视图中生成链接的优点之一:
<a href="<?= build_link('www.link.com'); ?>">link text</a>
您的build_link()
就是这样:
function build_link($path)
{
$prefix = '';
if (preg_match('|^(https?://|www\.)', $path))
{
$prefix = 'http://www.oursite.php?to=';
}
return $prefix . $path;
}
这意味着您甚至可以在链接中轻松使用CDN。
最简单的选择是使用Javascript,但是就像你说的那样依赖于用户使用支持Javascript的浏览器,这非常类似于浏览器技术的进步,即使在移动平台上也是如此。 jQuery看起来像这样:
$(document).ready(function() {
$('a').live('click', function() {
var href = $(this).attr('href');
if (href.match(/^(https?:\/\/|www\\.)/i))
{
this.href = 'http://www.oursite.php?to=' + href;
}
return this.href;
});
});
如果更改链接不可行,即您需要重写数据库或类似内容中的链接,我会考虑使用DOMDocument
- 在处理复杂结构时避免混乱的正则表达式通常是一种好习惯例如HTML
$doc = new DOMDocument('1.0', 'UTF-8');
$doc->loadHTML($text);
$anchors = $doc->getElementsByTagName('a');
foreach($anchors as $a) {
$href = $a->getAttribute('href');
if (preg_match('|^(https?://|www\.)', $href))
{
$a->setAttribute('href', 'http://www.oursite.php?to=' . $href);
}
}
$newHTML = $doc->saveHTML();
所以这里有三个选项:
浏览网站上输出外部网站链接的每个部分,然后通过build_link
函数重新编写
使用DOMDocument
答案 1 :(得分:0)
我会使用PHP来让页面内容通过使用正则表达式替换链接的过滤器运行。
使用javascript意味着paople可以将其关闭。 PHP确保正确替换所有链接。
请记住确保任何内部链接(如导航)都保持不变。
有许多类型的正则表达式可以找到网址,您必须选择一个适合您需要的网址
编辑:我会使用此正则表达式(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)