http://([a -zA-Z0-9 -..] + [A-Za-Z0-9] + [A-Za-Z] {2,3} (/ *)
Это ни в коем случае не регулярное выражение URL. Это может работать в двух или трех случаях, но вы игнорируете существование:
Пользователям особенно не понравится последнее, потому что, когда они ссылаются на какой-либо сайт, эта ссылка становится недействительной с помощью вашего регулярного выражения. Используйте общий способ, например DOMDocument.replaceChild()
, чтобы изменить ссылки в документе HTML (который, как я полагаю, вы используете, так как вы захватываете URL-адреса в тегах <a>
).
Как сказано в этого ответа , это можно сделать с помощью чего-то подобного, не проверенного:
$dom = new DOMDocument();
$html = @$dom->load(...); // Load your html
$links = $dom->getElementsByTagName('a');
foreach ($links as $link)
{
// Store original node
$origLink = $link;
// Find original href
$href = $link->getAttribute('href');
// Replace link
$href = "http://www.site.com/system/link_tracker.php?URL=" . urlencode($href) . "&ID={$ID}";
// Replace href
$link->setAttribute('href', $href);
// Replace child (don't know if this is required because you already alter $link)
$dom->replaceChild($link, $origLink);
}