2010-10-20 6 views
1

Je travaille sur un projet où je dois remplacer urls texte partout domain.com-www.domain.com à http(s)://www.domain.com et adresses e-mail à la bonne balise html <a>. J'utilisais une excellente solution dans le passé, mais elle utilisait la fonction eregi_replace maintenant dépréciée. En plus de cela, l'expression régulière utilisée pour une telle fonction ne fonctionne pas avec preg_replace. Donc, fondamentalement, l'utilisateur entre un message dans lequel peut/ne peut pas contenir une adresse de lien/e-mail et j'ai besoin d'une expression régulière qui fonctionne avec preg_replace pour remplacer ce lien/email avec un lien HTML comme <a href="link">link</a>.PHP Regular Expression URL de texte HTML Lien

Veuillez noter que j'ai plusieurs autres preg_replaces aussi. Ci-dessous est mon code actuel pour le autres remplacements en cours.

$patterns = array('~\[@([^\]]*)\]~','~\[([^\]]*)\]~','~{([^}]*)}~','~_([^_]*)_~','/\s{2}/'); 
$replacements = array('<b class="reply">@\\1</b>','<b>\\1</b>','<i>\\1</i>','<u>\\1</u>','<br />'); 
$msg = preg_replace($patterns, $replacements, $msg); 
return stripslashes(utf8_encode($msg)); 

Répondre

6

J'ai créé un ensemble très basique des expressions régulières pour cela. Ne vous attendez pas à ce qu'ils soient fiables à 100%, et vous devrez peut-être les modifier au fur et à mesure.

$pattern = array(
    '/((?:[\w\d]+\:\/\/)?(?:[\w\-\d]+\.)+[\w\-\d]+(?:\/[\w\-\d]+)*(?:\/|\.[\w\-\d]+)?(?:\?[\w\-\d]+\=[\w\-\d]+\&?)?(?:\#[\w\-\d]*)?)/' , # URL 
    '/([\w\-\d]+\@[\w\-\d]+\.[\w\-\d]+)/' , # Email 
    '/\[@([^\]]*)\]/' , # Reply 
    '/\[([^\]]*)\]/' , # Bold 
    '/\{([^}]*)\}/' , # Italics 
    '/_([^_]*)_/' , # Underline 
    '/\s{2}/' , # Linebreak 
); 
$replace = array(
    '<a href="$1">$1</a>' , 
    '<a href="mailto:$1">$1</a>' , 
    '<b class="reply">@$1</b>' , 
    '<b>$1</b>' , 
    '<i>$1</i>' , 
    '<u>$1</u>' , 
    '<br />' 
); 
$msg = preg_replace($pattern , $replace , $msg); 
return stripslashes(utf8_encode($msg)); 
+0

Excellent homme! Tu sais ce que tu fais! J'apprécie votre aide avec celui-ci. –

+0

note rapide - ajouter un point-virgule après la fermeture) pour $ remplacer. –

+0

@Lucanos c'est super, mais l'URL, ne supporte pas les parenthèses. – Vallentin