Foros del Web » Programando para Internet » PHP »

Enlaces y expresiones regulares

Estas en el tema de Enlaces y expresiones regulares en el foro de PHP en Foros del Web. Hola a todos. Estoy montandome un sistema de etiquetas personalizadas para contenido insertado por usuarios y tengo un problemilla con los enlaces. Teniendo estos ejemplos ...
  #1 (permalink)  
Antiguo 10/06/2007, 04:41
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 4 meses
Puntos: 0
Enlaces y expresiones regulares

Hola a todos.
Estoy montandome un sistema de etiquetas personalizadas para contenido insertado por usuarios y tengo un problemilla con los enlaces.
Teniendo estos ejemplos como enlaces (válidos y no válidos)

1-[LINK] http://www.google.com [/LINK]
2-[LINK] www.googlje.com [/LINK]
3-[LINK] www.googlje.com/index.php [/LINK]
4-[LINK] javascript:alert('hola '); [/LINK]
5-[LINK] javascript [/LINK]
6-[LINK] www.google.com\" onclick=\"alet('hola');\" [/LINK]


Esta expresion regular me acepta todos los enlaces:
\[LINK\] ([\w\W]*) \[\/LINK\]

Pero lógicamente los enlaces nº 4,5 y 6 no pueden ser válidos...
Estoy intentado con
\[LINK\] ([^javascript][\w\W]*) \[\/LINK\]

Pero me sigue aceptando todos... creo que no hago bien uso del ^ para discriminar una determinada cadena
  #2 (permalink)  
Antiguo 12/06/2007, 00:50
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 4 meses
Puntos: 0
Re: Enlaces y expresiones regulares

refloto el tema
  #3 (permalink)  
Antiguo 11/07/2007, 07:23
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 4 meses
Puntos: 0
Re: Enlaces y expresiones regulares

Dicho de otra forma, quiero añadir a la expresión regular algo que diga:
"no contenga la CADENA 'javacript:'

Se que con ^ dentro de un corchete ( [ ) indica que no contenga los caracteres indicados pero lo que yo quiero es una cadena en concreto.
  #4 (permalink)  
Antiguo 16/07/2007, 05:55
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 4 meses
Puntos: 0
Re: Enlaces y expresiones regulares

Después de que se me iluminara la bombilla con http://www.forosdelweb.com/f18/bbcode-citar-mensaje-con-cita-375546/, se me ha ocurrido como zanjar este tema.
Para quien le surja la misma duda o para quien se lo quiera mirar para encontrar posibles vulnerabilidades:
Código PHP:
preg_match_all('/\[LINK\](?:http:\/\/)?([a-zA-Z0-9_\?=;\.\/\&#:]+)\[\/LINK\]/'$texto$coincidenciasPREG_SET_ORDER );        
        
    foreach( 
$coincidencias AS $coincidencia )
    {
        
$cadena $coincidencia[0];
        if( !
preg_match"/javascript:/i"$cadena ) )
        {    
$reemplazo "<a href=\"\\1\" />\\1";
        }
        else
        {    
$reemplazo "";
        }
        
$cadena str_replace'/''\/'$cadena );
        
$cadena str_replace'.''\.'$cadena );
        
$patron "/\[LINK\](".substr$cadena5strlen$cadena )-12 ).")\[\/LINK\]/";
        
$texto preg_replace$patron,  $reemplazo$texto );
    } 
$texto es el texto a formatear.
Lo primero que hago es buscar los [LINK]www.web.com[/LINK] que existe en el texto y se guardan en $coincidencias.

Se recorre cada una de las coincidencias y se aplica la expresión regular /javascript:/i para ver si existe la cadena prohibida.
Si existe la cadena prohibida, no se traduce [LINK] a <a href..>;
Si no existe la cadena prohibida se traduce [LINK] a <a href...>;

Y ya está.
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 21:53.