一个像facebook一样实现l.php的好方法?
什么是l.php 我猜l.php正在运行link.php 脸谱网。这是一个预重定向 剧本facebook上的每个链接都是 过滤到link.php?到=link 我有一些想法。像一个像facebook一样实现l.php的好方法?,php,design-patterns,Php,Design Patterns,什么是l.php 我猜l.php正在运行link.php 脸谱网。这是一个预重定向 剧本facebook上的每个链接都是 过滤到link.php?到=link 我有一些想法。像 创建一个渲染类或使用正则表达式过滤输入,找到一个www.link.com,然后将其更改为类似于,问题是当我们有一些更改时,如果我们更改了某些内容,那么所有存档链接都将不起作用(假设我们将输入放入数据库) 使用JavaScript来实现这一点,我是说是的,但我不熟悉js,但我知道我们可以像上面那样实时搜索和更改链接。但问题
,问题是当我们有一些更改时,如果我们更改了某些内容,那么所有存档链接都将不起作用(假设我们将输入放入数据库)或者您可能有更好的答案我们植入l.php的最佳方式是什么?这将是使用函数在视图中生成链接的优点之一:
<a href="<?= build_link('www.link.com'); ?>">link text</a>
这意味着您甚至可以在链接中轻松使用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\u link
功能重新编写它们DOMDocument
我会使用PHP让页面内容通过使用正则表达式替换链接的过滤器运行 使用javascript意味着paople可以关闭它。PHP确保正确替换所有链接 只需记住确保任何内部链接(如导航)保持不变 有许多类型的正则表达式可以查找URL,您必须选择一种适合您需要的正则表达式
编辑:我会使用这个正则表达式
(https?:/([-\w\.]+)+(:\d+)(/([\w/\.]*(\?\S+)?)
谢谢!!!!,非常好的答案,但是,你有什么建议?域名有什么缺点吗?比如ram的使用?如果选项有正反两方面的话会更好。我还没有做任何测试来查看DOMDocument的性能,您可能想自己测试一下,看看它是否太重。不过,对于这么简单的东西来说,它可能有点重,所以如果您想使用正则表达式,您可以只执行preg_替换(preg_replace”)|
$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();