Foros del Web » Programando para Internet » PHP »

problema con colorerado de texto

Estas en el tema de problema con colorerado de texto en el foro de PHP en Foros del Web. hola encontre por el foro esta funcion Código PHP: function  doHighlight ( $srchTerms , $haystack ) {       $srchTerms  =  preg_quote ( $srchTerms ,  "/" );  ...
  #1 (permalink)  
Antiguo 18/11/2005, 06:38
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 21 años, 1 mes
Puntos: 1
problema con colorerado de texto

hola encontre por el foro esta funcion
Código PHP:
function doHighlight($srchTerms,$haystack) { 

    
$srchTerms preg_quote($srchTerms"/"); // Tambien agregue esto 

    
$needle =str_replace(" ""|"$srchTerms); 

    
$busca = array("a","e","i","o","u""ñ""Ñ"); 
    
$reemplaza = array("[aàáâãäåÀÁÂÃÄÅ]""[eèéêëÈÉÊË]""[iìíîïÌÍÎÏ]""[oòóôõöÒÓÔÕÖ]""[uùúûüÙÚÛÜ]""[nñÑ]""[nñÑ]"); 
    
$needle str_replace($busca$reemplaza$needle); 
    
$text preg_replace("/($needle)/i","<span style=\"background:#FFFF9F\">\\0</span>"$haystack); 

    
    return 
$text

y me funciona bien, pero tengo un problema que no consigo solucionar y es que cuando el texto que se subraya va dentro de un link lo pone mal por ejemplo buscamos php entonces si el link fuera <a href="http//php.net">loquesea</a> lo devuelve <a href="http//<span style="background:#FFFF9F"">php</span>.net">loquesea</a> entonces el link queda mal sabeis como puedo solucionarlo?,solo quiero que seleccionara el texto si no esta dentro de un href pero si si esta en el texto del enlace


Un Saludo y gracias
  #2 (permalink)  
Antiguo 21/11/2005, 02:37
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 21 años, 1 mes
Puntos: 1
Nadie me puede ayudar?¿

Un Saludo
  #3 (permalink)  
Antiguo 21/11/2005, 10:46
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Hola,
esto es una idea, prueba reemplazar
Código PHP:
$text preg_replace("/(?!<\w+[^>]*)($needle)(?!>)/i","<span style=\"background:#FFFF9F\">\\1</span>"$haystack); 
Nunca habia usado negar patrones (?!) asi que no es exactamente como va a funcionar. Tampoco lo puedo probar donde estoy. Perdon jejeje...

Si alguin tienen alguna sugerencia.....

Saludos
  #4 (permalink)  
Antiguo 21/11/2005, 11:05
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 21 años, 1 mes
Puntos: 1
nada no funciono

tambien tengo esta funcion
Código PHP:
<?
    
function highlight_search($search_words,$string,$bgcolors='yellow')
    {
        if (
is_array($bgcolors)) {
            
$no_colors=count($bgcolors);
        } else {
            
$temp=$bgcolors;
            unset(
$bgcolors);
            
$bgcolors[0]=$temp;
            
$no_colors=1;
        }
        
$word_no=0;
        foreach(
$search_words as $search_word)
        {
            
$regex1 ">[^<]*(";
            
$regex2 ")[^<]*<";
            
preg_match_all("/".$regex1.$search_word.$regex2."/i"$string$matchesPREG_PATTERN_ORDER);
            foreach(
$matches[0] as $match)
            {
              
preg_match("/$search_word/i"$match$out);
              
$case_sensitive_search_word $out[0];
              
$newtext str_replace($case_sensitive_search_word,"<span style=\"background-color: ".$bgcolors[($word_no $no_colors)].";\">$case_sensitive_search_word</span>"$match);
              
$string str_replace($match$newtext$string);
            }
            
$word_no++;
        }
        return 
$string;
    }

?>
esta hace eso bien pero no me reconoce los acentos y tal como por ejemplo paises cuando pongo países y vicerversa

Gracias

Un Saludo
  #5 (permalink)  
Antiguo 22/11/2005, 09:35
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Y asi???:
Código PHP:
$text preg_replace("/>(?!<\w+[^<]*)($needle)(?!<*)/i","<span style=\"background:#FFFF9F\">\\1</span>"$haystack); 
esta basado en el otro....
  #6 (permalink)  
Antiguo 22/11/2005, 15:17
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 21 años, 1 mes
Puntos: 1
con esta ni no saca el coloreado en los link pero es por que no subraya nada ni link ni no link..

bueno estare fuera una semana cuando vuelva dare otra vez el coñazo

Muchas gracias

Un Saludo
  #7 (permalink)  
Antiguo 30/11/2005, 02:24
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 21 años, 1 mes
Puntos: 1
ya estoy aqui para dar por saco otra vez....

alguna sugerencia al problema?¿

un Saludo
  #8 (permalink)  
Antiguo 02/12/2005, 04:23
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 21 años, 1 mes
Puntos: 1
Nadie sabe?¿

Un Saludo
  #9 (permalink)  
Antiguo 12/12/2005, 04:31
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 21 años, 1 mes
Puntos: 1
Nadie me puede ayudar a añadir este patron a este funcion ?
Patron :
Código PHP:
$busca = array("a","e","i","o","u""ñ""Ñ");  
    
$reemplaza = array("[aàáâãäåÀÁÂÃÄÅ]""[eèéêëÈÉÊË]""[iìíîïÌÍÎÏ]""[oòóôõöÒÓÔÕÖ]""[uùúûüÙÚÛÜ]""[nñÑ]""[nñÑ]");  
    
$needle str_replace($busca$reemplaza$needle); 
funcion :
Código PHP:
<? 
    
function highlight_search($search_words,$string,$bgcolors='yellow'
    { 
        if (
is_array($bgcolors)) { 
            
$no_colors=count($bgcolors); 
        } else { 
            
$temp=$bgcolors
            unset(
$bgcolors); 
            
$bgcolors[0]=$temp
            
$no_colors=1
        } 
        
$word_no=0
        foreach(
$search_words as $search_word
        { 
            
$regex1 ">[^<]*("
            
$regex2 ")[^<]*<"
            
preg_match_all("/".$regex1.$search_word.$regex2."/i"$string$matchesPREG_PATTERN_ORDER); 
            foreach(
$matches[0] as $match
            { 
              
preg_match("/$search_word/i"$match$out); 
              
$case_sensitive_search_word $out[0]; 
              
$newtext str_replace($case_sensitive_search_word,"<span style=\"background-color: ".$bgcolors[($word_no $no_colors)].";\">$case_sensitive_search_word</span>"$match); 
              
$string str_replace($match$newtext$string); 
            } 
            
$word_no++; 
        } 
        return 
$string
    } 

?>
Gracias

Un Saludo
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 19:03.