2011-07-14 4 views
0

Je dois informer mes utilisateurs qu'ils cliquent sur un lien externe. J'ai de nombreuses sortes de chats sur mon site et parfois des utilisateurs postent des liens, ces liens peuvent être dangereux pour eux donc je voulais les prévenir avant de quitter le site.intercepter les liens externes avant de rediriger l'utilisateur

Par exemple eveonline.com utilise les éléments suivants sur leurs forums: http://www.eveonline.com/externalLink.aspx?l=http://altdevblogaday.com/2011/07/11/the-hidden-evil-of-the-micro-transaction/

chaque fois qu'un lien apparaît qu'ils voient si le domaine est différent de celui eveonline.com et si ce sont elles ajouter le « http: // www .eveonline.com/externalLink.aspx? l = "à lui.

Ceci est ma fonction makeClickableLinks, je l'utilise pour rendre les liens cliquables, je me demandais si quelqu'un pourrait réécrire si pour moi faire le ci-dessus + cliquable que je n'ai pas écrit cette fonction puisque je suis clueless avec preg_match.

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

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


    return $text; 
    } 

La variable $ text est le message de l'utilisateur.

+0

Apprenez regex, puis preg_match = easy peasy. Commencez ici: http://gskinner.com/RegExr/ – kevtrout

Répondre

1

Je ne suis pas un assistant PHP, mais essayez-le. Notez que presque tout cela est pris directement dans le manuel PHP here.

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

    $text = eregi_replace('([[:space:]()[{}])(www.[[email protected]:%_\+.~#?&//=]+)', 
          '\\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; 
} 
+0

merci elmugrat, je pense que vous avez manqué le fait que le texte $ est le message de l'utilisateur, il vient avec du texte, certains
s peut-être et les URL sans la balise "a". C'est à quoi sert ma fonction, renvoyer le même texte mais ajoute les balises "a" aux URLs. J'essaye de faire cette fonction voir si le lien est externe et si oui ajoutez mon redirecteur. Merci encore. –

+0

Ah ok je l'ai mal compris. Je vais éditer ma réponse ... vérifier dans quelques-uns. –

+0

merci mon ami, je reçois l'avertissement Attention: eregi_replace() [fonction.eregi-remplacer]: REG_BADRPT dans la 3ème ligne eregi_replace, je me demande ce que c'est ... –

Questions connexes