Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/10/2007, 11:52
albertt_t
 
Fecha de Ingreso: noviembre-2004
Mensajes: 159
Antigüedad: 19 años, 6 meses
Puntos: 0
Exclamación Problema en función para resaltar textos

Saludos Amigos, encontre una función que me permite resaltar el color de los resultados. Pero quiero decirle que no resalte las palabras que estan en el array $no_replacements.

Esta es la función:


Código PHP:
function marker($words,$body){
    
  
$patterns = array();
    
$replacements = array();
    
$no_replacements=array("de","la""en""el""da","di","e","i");

    
    foreach (
$words as $i => $word) {
        
        
        
        
$patterns[] = '/' preg_quote($word) .'/i';
        
$replacements[] = "<span class='marker'>\\0</span>";
        
        
        
        
    }
    
//<span style=\"color:blue; background-color:yellow;\">".$arg."</span>
    // Split up the page into chunks delimited by a
    // reasonable approximation of what an HTML element
    // looks like.
    
$parts preg_split("{(<(?:\"[^\"]*\"|'[^']*'|[^'\">])*>)}",
                        
$body,
                        -
1,  // Unlimited number of chunks
                        
PREG_SPLIT_DELIM_CAPTURE);
                        
                        
    foreach (
$parts as $i => $part) {
        
// Skip if this part is an HTML element
        
if (isset($part[0]) && ($part[0] == '<')) 
         { continue; }
        
// Wrap the words with <span/>s
        
        
$parts[$i] = preg_replace($patterns$replacements$part);
    }
    
    
    
    
// Reconstruct the body
    
$body implode('',$parts);
    
    return  
$body;
    
}

Que me retorna el texto con las coincidencias resaltadas.

Un ejemplo de uso seria:

$word=array("naci","en","Ciudad");

$valor marker ($word,$bod);

echo 
$valor
agregue un if antes del foreach para verificar que exista en la cadena de no reemplazos.

Código PHP:
if (!in_array($no_replacements,$parts))                       
    {
    foreach (
$parts as $i => $part) {
        
// Skip if this part is an HTML element
        
        
        
if (isset($part[0]) && ($part[0] == '<')) 
         
        
        
        { continue; }
        
// Wrap the words with <span/>
                
        
$parts[$i] = preg_replace($patterns$replacements$part);
    
    
    
                                    }
    } 
Pero igual me sigue mostrando resaltados los valores en el array $no_replacements.

Alguien me puede indicar en que parte del codigo estoy mal?.

Gracias.