Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/08/2012, 13:19
SeaPirates
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 786
Antigüedad: 15 años, 3 meses
Puntos: 9
Reemplazar enlaces sin afectar a BBCodes

Lo que trato de hacer es que al enviar un mensaje, los enlaces los reconozca, para ello usé la función eregi_replace(), pero me reemplaza también los enlaces de los bbcode.

¿Como lo puedo hacer?

Código PHP:
    public function Message($string) {
                
$string htmlentities($string);  
 
    
$to_search = array(  
                
'/\[b\](.*?)\[\/b\]/is',  
                
'/\[i\](.*?)\[\/i\]/is',  
                
'/\[u\](.*?)\[\/u\]/is',  
                
'/\[url\=(.*?)\](.*?)\[\/url\]/is',  
                
'/\[url\](.*?)\[\/url\]/is',  
                
'/\[align\=(left|center|right)\](.*?)\[\/align\]/is',  
                
'/\[img\](.*?)\[\/img\]/is',  
                
'/\[mail\=(.*?)\](.*?)\[\/mail\]/is',  
                
'/\[mail\](.*?)\[\/mail\]/is',  
                
'/\[font\=(.*?)\](.*?)\[\/font\]/is',  
                
'/\[size\=(.*?)\](.*?)\[\/size\]/is',  
                
'/\[color\=(.*?)\](.*?)\[\/color\]/is',  
                
'/\[quote\=(.*?)\](.*?)\[\/quote\]/is'
                
'/\[quote\](.*?)\[\/quote\]/is'
               
                );  
 
    
$to_replace = array(  
                
'<strong>$1</strong>',  
                
'<em>$1</em>',  
                
'<u>$1</u>',  
                
'<a href="$1" rel="nofollow" title="$2 - $1">$2</a>',  
                
'<a href="$1" rel="nofollow" title="$1">$1</a>',  
                
'<div style="text-align: $1;">$2</div>',  
                
'<img style="max-width: 700px; max-height: 700px;" src="$1" alt="" />',  
                
'<a href="mailto:$1">$2</a>',  
                
'<a href="mailto:$1">$1</a>',  
                
'<span style="font-family: $1;">$2</span>',  
                
'<span style="font-size: $1;">$2</span>',  
                
'<span style="color: $1;">$2</span>',  
                
'<div id="bbcode_quote"><div id="bbcode_quote_cited">Cita de: $1</div><div id="bbcode_quite_message">$2</div></div>'
                
'<div id="bbcode_quote"><div id="bbcode_quote_cited">Cita</div><div id="bbcode_quite_message">$1</div></div>'
                );  
 
    
// Reemplazar
    
$string preg_replace ($to_search$to_replace$string);
    
// De paso hacemos que convierta los salto de línea en < /br>  
    
$string nl2br($string);
    
$string eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_+.~#?&//=]+)','<a href="\1">\1</a>'$string);
    
$string eregi_replace('(((f|ht){1}tps://)[-a-zA-Z0-9@:%_+.~#?&//=]+)''<a href="\1">\1</a>'$string);
    
// Retornamos el string con los BBCode pasados a tags HTML.
    
return $string;  
         }