хороший способ реализовать l.php, как Facebook? - PullRequest
0 голосов
/ 19 апреля 2011

что такое l.php

я предполагаю, что l.php - это link.php на facebook.это сценарий предварительного перенаправления.каждая ссылка на фейсбуке фильтруется на link.php? to = link

Я имею в виду некоторые вещи.как

  1. сделать класс рендеринга или отфильтровать ввод с помощью регулярного выражения, найти www.link.com , а затем изменить его на что-то вроде <a href="http://www.oursite.php?to=www.link.com">link</a>, проблема в том,когда у нас есть какие-то изменения, если мы что-то изменим, тогда все наши ссылки на архивы не будут работать (предположим, что мы поместили ввод в базу данных.).

  2. использовать JavaScript длясделать это, я имею в виду да, но я не знаком с JS, но я знаю, что мы можем искать и изменять ссылки жить, как указано выше.но проблема в том, что у пользователя нет включенного js, (мобильного или плагина JavaScript и т. д.)

или, возможно, у вас есть лучший ответ лучший способ имплантировать l.php?

Ответы [ 2 ]

2 голосов
/ 19 апреля 2011

Это был бы один из плюсов использования функции для генерации ссылок в ваших представлениях:

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

Таким образом, здесь есть три варианта:

  1. Просмотрите каждую часть вашего сайта, котораявыводит ссылки на внешние сайты и переписывает их с помощью функции build_link

  2. Перезапись с помощью DOMDocument

  3. Использование Javascript
0 голосов
/ 19 апреля 2011

Я бы использовал PHP, чтобы содержимое страницы проходило через фильтр, использующий регулярные выражения для замены ссылок.

Использование javascript будет означать, что paople может отключить его. PHP гарантирует, что все ссылки будут заменены правильно.

Просто не забудьте убедиться, что любые внутренние ссылки (например, навигация) остались нетронутыми.

Существует много типов регулярных выражений, которые находят URL-адреса, и вы должны выбрать тот, который соответствует вашим потребностям

Редактировать: я бы использовал это регулярное выражение (https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...