перехват внешних ссылок перед перенаправлением пользователя - PullRequest
0 голосов
/ 14 июля 2011

Мне нужно, чтобы мои пользователи знали, что они нажимают на внешнюю ссылку.У меня на сайте много чатов, и иногда пользователи публикуют ссылки, эти ссылки могут быть опасными для них, поэтому я хотел предупредить их перед тем, как покинуть сайт.

Например, eveonline.com использует на своих форумах следующее: http://www.eveonline.com/externalLink.aspx?l=http://altdevblogaday.com/2011/07/11/the-hidden-evil-of-the-micro-transaction/

всякий раз, когда появляется ссылка, они видят, отличается ли домен от eveonline.com, и добавляют ли они домен."http://www.eveonline.com/externalLink.aspx?l=".я ничего не понимаю с preg_match.

function makeClickableLinks($text)
    {
    $text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)','<a target="_blank" href="\\1">\\1</a>', $text);

    $text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)','\\1<a target="_blank" href="http://\\2">\\2</a>', $text);


    return $text;
    }

переменная $ text - это сообщение пользователя.

1 Ответ

1 голос
/ 14 июля 2011

Я не волшебник PHP, но попробуй. Обратите внимание, что почти все это взято прямо из руководства PHP здесь .

function makeClickableLinks($text)
{
    $text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
                          '<a target="_blank" href="\\1">\\1</a>', $text);      

    $text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
                          '\\1<a target="_blank" href="http://\\2">\\2</a>', 
                          $text);

    $regex = '@(<a.*?href=")((?!(?:(?:f|ht)tps?://)?(?:[a-z0-9]+\.)?domain\.com)[^"]*)@i';
    $replacement = '$1http://your.domain.com/externLink.php?l=$2';

    $text = preg_replace($regex, $replacement, $text);

    return $text;
}
...