像lfacebook这样的l.php的好方法吗?

| 什么是l.php 我猜l.php是link.php上 脸书它是一个预重定向 脚本。在facebook上的每个链接是 过滤到link.php?to = link 我有一些想法。喜欢 创建一个渲染类或使用正则表达式过滤输入,找到一个www.link.com然后将其更改为
<a href=\"http://www.oursite.php?to=www.link.com\">link</a>
,问题是当我们进行了一些更改时,如果我们进行了更改,则所有存档链接都不会工作(假设我们将输入放入数据库中。)。 使用JavaScript可以做到这一点,我的意思是,但是我对js不熟悉,但是我知道我们可以像上面那样搜索和更改链接。但是问题是当用户没有js(移动或没有JavaScript插件等)时 还是您有一个更好的答案,什么是我们植入l.php的最佳方法?
已邀请:
这将是使用函数在视图中生成链接的优点之一:
<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();
因此,这里有三个选项: 浏览站点上输出到外部站点的链接的每个部分,然后通过“ 7”功能重写它们 在ѭ5的帮助下重写 使用JavaScript
我本来会使用PHP来让页面的内容通过使用正则表达式替换链接的过滤器运行的。 使用javascript意味着paople可以将其关闭。 PHP确保正确替换所有链接。 只要记住确保所有内部链接(如导航)保持不变即可。 查找URL的正则表达式有很多类型,您必须选择一种适合您需要的正则表达式 编辑:我将使用此正则表达式
(https?://([-\\w\\.]+)+(:\\d+)?(/([\\w/_\\.]*(\\?\\S+)?)?)?)

要回复问题请先登录注册