Foros del Web » Programando para Internet » PHP »

iluminar varias palabras al mismo tiempo

Estas en el tema de iluminar varias palabras al mismo tiempo en el foro de PHP en Foros del Web. tengo el siguiente problema: cuando quiero iluminar 1 sola palabra funciona perfecto pero cuando ilumino una palabra y luego hay otra palabra que le sigue ...
  #1 (permalink)  
Antiguo 23/06/2009, 06:49
Avatar de farra  
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 16 años, 2 meses
Puntos: 20
Pregunta iluminar varias palabras al mismo tiempo

tengo el siguiente problema:

cuando quiero iluminar 1 sola palabra funciona perfecto pero cuando ilumino una palabra y luego hay otra palabra que le sigue y esa palabra contiene "back" "color" "style"... etc... no ilumina correctamente y me muestra html en pantalla....


este es mi codigo:
Código PHP:
<?php 

// palabras a iluminar
//$texto=htmlentities($_GET['txt']);
$texto="hola a que lindo color tu auto";
// parrafo
//$palabras=$row_texto['parrafo'];
$palabras="hola, viste back to the future me gusto el color del auto";


// inicio separa los nombres hasta 4
$texto=explode(" ",$texto);
$palabra1=$texto[0];
$palabra2=$texto[1];
$palabra3=$texto[2];
$palabra4=$texto[3];


// iluminar coincidencias
$busqueda1=$busqueda1;
$busqueda2=$busqueda2;
$busqueda3=$busqueda3;
$busqueda4=$busqueda4;


// iluminar coincidencias
$busqueda1=$palabra1;
$palabras=str_replace($busqueda1,"<span style='background-color: #FFFF00;'>$busqueda1</span>",$palabras);

$busqueda2=$palabra2;
$palabras=str_replace($busqueda2,"<span style='background-color: #FFFF00;'>$busqueda2</span>",$palabras);

$busqueda3=$palabra3;
$palabras=str_replace($busqueda3,"<span style='background-color: #FFFF00;'>$busqueda3</span>",$palabras);

$busqueda4=$palabra4;
$palabras=str_replace($busqueda4,"<span style='background-color: #FFFF00;'>$busqueda4</span>",$palabras);

$resultado=$palabras;


echo 
$resultado;
?>

alguna idea solbre que puedo hacer para corregir esto?
__________________
Firma:
Es mas dificil para el mono entender que el hombre desciende de el....

PD: Siempre doy karma al que me da una buena respuesta... ;0)
  #2 (permalink)  
Antiguo 23/06/2009, 07:19
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 15 años
Puntos: 7
Respuesta: iluminar varias palabras al mismo tiempo

Hola, hay un problema:
a ver, por ejemplo: $palabra2 en tu caso es "a", entonces haces un string_replace con el resultado de hacer el replace tambien de las "a" que estan en <span... (que ha sido insertado con el primero replace).
Entonces asì no se puede hacer.
Mejor hacer un replace unico utilizando los array, como que en
mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
$search puede ser un array asì como $replace
o
utilizar preg_replace y las regular expressions.
Chao!
  #3 (permalink)  
Antiguo 23/06/2009, 07:45
Avatar de farra  
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 16 años, 2 meses
Puntos: 20
Respuesta: iluminar varias palabras al mismo tiempo

ya probe tambien con array mixed pero haciendo de esa forma no funciona nada....

mira:

Código PHP:
<?php 

// palabras a iluminar
//$texto=htmlentities($_GET['txt']);
$texto="hola a que lindo color tu auto";
// parrafo
//$palabras=$row_texto['parrafo'];
$palabras="hola, viste back to the future me gusto el color del auto";


// inicio separa los nombres hasta 4
$texto=explode(" ",$texto);
$palabra1=$texto[0];
$palabra2=$texto[1];
$palabra3=$texto[2];
$palabra4=$texto[3];


// iluminar coincidencias
$busqueda1=$busqueda1;
$busqueda2=$busqueda2;
$busqueda3=$busqueda3;
$busqueda4=$busqueda4;


// iluminar coincidencias
$busquedas=array($busqueda1,$busqueda2,$busqueda3,$busqueda4);
$palabrast=array("<span style='background-color: #FFFF00;'>".$busqueda1."</span>","<span style='background-color: #FFFF00;'>".$busqueda2."</span>","<span style='background-color: #FFFF00;'>".$busqueda3."</span>","<span style='background-color: #FFFF00;'>".$busqueda4."</span>");

$palabras=str_replace($busquedas,$palabrast,$palabras);
$resultado=$palabras;


echo 
$resultado;
?>
__________________
Firma:
Es mas dificil para el mono entender que el hombre desciende de el....

PD: Siempre doy karma al que me da una buena respuesta... ;0)
  #4 (permalink)  
Antiguo 23/06/2009, 07:56
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 15 años
Puntos: 7
Respuesta: iluminar varias palabras al mismo tiempo

Bueno, no funciona nada por eso:
Código PHP:
// iluminar coincidencias
$busqueda1=$busqueda1;
$busqueda2=$busqueda2;
$busqueda3=$busqueda3;
$busqueda4=$busqueda4
que tendria que ser
Código PHP:
$busqueda1=$palabra1;
$busqueda2=$palabra2;
$busqueda3=$palabra3;
$busqueda4=$palabra4
Pero vi que tambien asì no funciona porque sigue igual el problema que te dije antes, o sea se hace el replace tambien de los caracteres insertados con el replace anterior... Entonces hay que utilizar las regular expression y preg_replace, y ya saldrà todo bien!
  #5 (permalink)  
Antiguo 23/06/2009, 08:02
Avatar de farra  
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 16 años, 2 meses
Puntos: 20
Respuesta: iluminar varias palabras al mismo tiempo

la verdad no entiendo bien eso de las expresiones regulares y preg_replace... sera que podrias darme una pista o poner el codigo de como hacerlo de esa forma?
__________________
Firma:
Es mas dificil para el mono entender que el hombre desciende de el....

PD: Siempre doy karma al que me da una buena respuesta... ;0)
  #6 (permalink)  
Antiguo 23/06/2009, 08:34
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 15 años
Puntos: 7
Respuesta: iluminar varias palabras al mismo tiempo

Creo que asì pueda funcionar:
Código PHP:
$texto="hola a que lindo color tu auto";

$palabras="hola, viste back to the future me gusto el color del auto";

// inicio separa los nombres hasta 5
$texto=explode(" ",$texto);
$palabra1=$texto[0];
$palabra2=$texto[1];
$palabra3=$texto[2];
$palabra4=$texto[4];
$palabra5=$texto[5];

$change preg_replace_callback("/($palabra1)|($palabra2)|($palabra3)|($palabra4)|($palabra5)/"create_function(
            
'$matches',
            
'return "<span style=\'background-color: #FFFF00;\'>$matches[0]</span>";'
        
), $palabras);

echo 
$change
ciao!

Última edición por abidibo; 23/06/2009 a las 09:43
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 11:06.