Это был бы один из плюсов использования функции для генерации ссылок в ваших представлениях:
<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
- Использование Javascript