Foros del Web » Programando para Internet » PHP »

Reemplazar enlaces sin afectar a BBCodes

Estas en el tema de Reemplazar enlaces sin afectar a BBCodes en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 05/08/2012, 13:19
 
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;  
         } 
  #2 (permalink)  
Antiguo 05/08/2012, 17:12
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Reemplazar enlaces sin afectar a BBCodes

Las funciones ereg* son obsoletas y, en su lugar, debes usar preg*, aunque hay algunos cambios en las expresiones regulares, puesto que se usan las compatibles con PERL; más info de esto: http://www.forosdelweb.com/f18/aport...s-pcre-646110/

Ahora, creo que lo más fácil sería primero buscar urls y correos que no estén dentro de etiquetas BBCode para agregárselas, ya después aplicas los reemplazos BBCode.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 06/08/2012, 03:19
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 786
Antigüedad: 15 años, 3 meses
Puntos: 9
Respuesta: Reemplazar enlaces sin afectar a BBCodes

Cita:
Iniciado por Triby Ver Mensaje
Las funciones ereg* son obsoletas y, en su lugar, debes usar preg*, aunque hay algunos cambios en las expresiones regulares, puesto que se usan las compatibles con PERL; más info de esto: http://www.forosdelweb.com/f18/aport...s-pcre-646110/

Ahora, creo que lo más fácil sería primero buscar urls y correos que no estén dentro de etiquetas BBCode para agregárselas, ya después aplicas los reemplazos BBCode.
Es lo que pensaba, buscar las url que no estén entre los BBcode, pero no sé como hacer eso.

Etiquetas: enlaces, html, reemplazar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:49.