Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/04/2011, 13:34
emmacias
 
Fecha de Ingreso: marzo-2011
Mensajes: 8
Antigüedad: 13 años, 1 mes
Puntos: 0
Información Cambiar color de fondo en palabras claves usadas en una búsqueda

Un saludo para toda la comunidad. Resulta que estoy implementando una aplicación para gestionar noticias y una de las funcionalidades con la que cuento es la posibilidad de realizar búsquedas avanzadas por palabras clave, entonces lo que deseo hacer es que en el texto de las noticias que me da el sistema como resultado de las búsquedas se resalten con un color de fondo las palabras clave que el usuario utilizó para hacer la búsqueda, algo parecido a la cache de google.

El algoritmo que estoy intentando implementar recibe como parámetro dos variables, la primera "$contenido" es una variable string que contiene el texto de una noticia y la segunda "$palabras" es un array de string que contiene las palabras clave que utilizó el usuario para hacer la búsqueda, es decir las palabras que yo deseo resaltar con otro color de fondo en el texto de la noticia.

He llegado a un algoritmo que me funciona parcialmente pues no me resalta por ejemplo las palabras cuando tienen tilde y además también me resalta partes de palabras por ejemplo si una palabra clave que utilizó el usuario en la búsqueda fue "casa" y en el texto de la noticia aparece la palabra casador esta se resalta con el color de fondo cuando no debería, en definitiva acá les pongo el código y si me pueden dar algunas ideas de ante mano se los agradezco.

Código PHP:
public function resaltarFondoPalabras($contenido$palabras) {
        
// Se definen 8 colores para utilizar
        
$colores = array('#ffff66''#a0ffff''#99ff99''#ff9999''#8dc2f3''#e0bcf6''#b7b5b5''#ff6600');
        
$j 0;
 
        foreach (
$palabras as $palabra) {
            
$contenido str_ireplace("$palabra""<span style=\"background-color: $colores[$j]\">$palabra</span>"$contenido);
            
$j++;
            if (
$j 7)
                
$j 0;
        }
        
        return 
$contenido;
    }