php · 08.01.2010

Парсинг прямых ссылок

Задача состоит в том чтобы пропарсить контент и заменить все прямые ссылки вида

http://yunaliev.ru/

на http://yunaliev.ru/redirect.php?goto=http://yunaliev.ru/

В WordPress есть плагины для этого, которые делают все автоматически. Я не смотрел их код и как там реализовано не могу сказать, возможно чуть позже найду время для этого. В битриксе это нет к сожалению, по крайне мере я этого не нашел в стандартном API классе парсинга для форума и доп функциях для работы с текстом и html. Возможно решение не самое лучшее, но оно работает.

Мне очень нравится класс для парсинга html PHP Simple HTML DOM Parser именно его я использовал для решения этой задачи. Решение было нужно для форума битрикса, чтобы убрать все прямые ссылки:

Вот собственно сам код:


include ($_SERVER ["DOCUMENT_ROOT"] . '/simple_html_dom/simple_html_dom.php');

$html = new simple_html_dom();

# Строка
$html->load('<a href="http://yunaliev.ru">http://yunaliev.ru</a>');

# Выбираем все теги <a> в массив
$arObject = $html->find('a');</a>

<a> # Преобразуем ссылку
foreach ($arObject as $arValueObject)
{
$hrefValue = $arValueObject->href;
$arValueObject->href = 'http://www.yunaliev.ru/redirect.php?link='  .  <code>urlencode(</code>$hrefValue);
}</a>

<a> # Результат
echo $html;</a>

Функция для битрикса. Ложим библиотеку в /bitrix/php_interface/lib/


function parserActivLinkGoTuRedirect($sMassagePost)
{
require ($_SERVER ["DOCUMENT_ROOT"] . "/bitrix/php_interface/lib/simple_html_dom.php");

$html = new simple_html_dom();
$html->load($sMassagePost);

$arObject = $html->find('a');

foreach ($arObject as $arValueObject)
{
$hrefValue = $arValueObject->href;
$arValueObject->href = '/bitrix/redirect.php?goto=' . urlencode($hrefValue);
}

return $html;
}

Сам класс можно скачать тут