Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] resaltando palabras de busqueda

Estas en el tema de resaltando palabras de busqueda en el foro de PHP en Foros del Web. Que tal he usado una función que me encontré en este foro para resaltar mis palabras de búsqueda pero tengo algunos problemas. la funcion es: ...
  #1 (permalink)  
Antiguo 06/01/2016, 15:03
Avatar de LoUiMaNiAkO  
Fecha de Ingreso: enero-2006
Mensajes: 198
Antigüedad: 18 años, 4 meses
Puntos: 1
Pregunta resaltando palabras de busqueda

Que tal he usado una función que me encontré en este foro para resaltar mis palabras de búsqueda pero tengo algunos problemas.

la funcion es:
Código PHP:
function resaltar($buscar$texto) { 
    
    
$claves explode(" ",$buscar); 
    
$clave array_unique($claves);
    
$num count($clave); 
    for(
$i=0$i $num$i++) 
        
$texto preg_replace("/(".trim($clave[$i]).")/i","<span class='palabra'>\\1</span>",$texto);
    return 
$texto

Funciona bien su busco; ROMA,PAris ó ROMA paris, la diferencia entre uno y otro es que en uno uso coma y en otro uso espacio como separador de criterios,

problemas:

1.- no funciona si uso: roma, paris (coma y espacio como es normal) o paris roma (doble espacio) me imprime los resultados asi:
Código PHP:
<span class='palabra'></span><<span class='palabra'></span>s<span class='palabra'></span>p<span class='palabra'></span>a<span class='palabra'></span>n<span class='palabra'></span> <span class='palabra'></span>c<span class='palabra'></span>l<span class='palabra'></span>a<span class='palabra'></span>s<span class='palabra'></span>s<span class='palabra'></span>=<span class='palabra'></span>'<span class='palabra'></span>p<span class='palabra'></span>a<span class='palabra'></span>l<span class='palabra'></span>a<span class='palabra'></span>b<span class='palabra'></span>r<span class='palabra'></span>a<span class='palabra'></span>' y mucho masssss............ 
2.- También me truena los acentos.

Alguien puede ayudarme a mejorar el script?
__________________
:molesto: "Soy como dios k nunca llora y como satanas k nunca resa":molesto:

Dejate seducir por mis colmillos
  #2 (permalink)  
Antiguo 06/01/2016, 18:44
 
Fecha de Ingreso: diciembre-2015
Mensajes: 45
Antigüedad: 8 años, 4 meses
Puntos: 3
Respuesta: resaltando palabras de busqueda

Para que tanto relajo mejor ocupa magia negra XD

Cita:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<style type="text/css">
.palabra
{
color: red;
}
</style>
<?php

function resaltar($buscar, $texto) {

$texto=str_replace($buscar, "<span class='palabra'>".$buscar."</span>", $texto);

return $texto;
}
$variable=resaltar('canario','raton, gato, perro, canario');
echo $variable."<br>";
$variable=resaltar('gato ,+ tortúgà','perro ,+ gato ,adsfdfs raton, tortuga, gato ,+ tortúgà');
echo $variable."<br>";
$variable=resaltar('canario, perro','raton, gato, perro, canario, perro, gato, perro,');
echo $variable;
?>
  #3 (permalink)  
Antiguo 06/01/2016, 19:36
Avatar de LoUiMaNiAkO  
Fecha de Ingreso: enero-2006
Mensajes: 198
Antigüedad: 18 años, 4 meses
Puntos: 1
Respuesta: resaltando palabras de busqueda

hola gracias por responder, la función str_replace no me funciona ya que distingue entre mayúsculas y minúsculas asi que si busco PARis no lo encuentra porque en la base de datos esta como Paris o paris:

he modificado la función y creo que ya funciona ahora solo me falta buscar como hcer para que resalte las palabras tengan o no acento.

haber quien puede ayudarme...


Código PHP:
function resaltar($buscar$texto) { 
$buscar str_replace(" "","$buscar);
$clave explode(","$buscar); 

  
    foreach(
$clave as $i){ 
        
$i trim($i); 
        if(!empty(
$i)) $salida[] = $i
    } 
    
$clave=array_filter($salida);
  
    
$num count($salida);  
    for(
$i=0$i $num$i++)  
      
$texto preg_replace("/(".trim($clave[$i]).")/i","<span class='palabra'>\\1</span>",$texto);
    
    return 
$texto;  

__________________
:molesto: "Soy como dios k nunca llora y como satanas k nunca resa":molesto:

Dejate seducir por mis colmillos
  #4 (permalink)  
Antiguo 07/01/2016, 07:25
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: resaltando palabras de busqueda

el primero de tus problemas se soluciona con el método preg_split() y el segundo con una codificación correcta del documento (utf-8)
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #5 (permalink)  
Antiguo 07/01/2016, 11:59
Avatar de LoUiMaNiAkO  
Fecha de Ingreso: enero-2006
Mensajes: 198
Antigüedad: 18 años, 4 meses
Puntos: 1
Respuesta: resaltando palabras de busqueda

Gracias por tu respuesta, con ese metodo puder resumir la funcion asi:
Código PHP:
function resaltar($buscar$texto) { 
$clave preg_split("/[\s,]+/",$buscar);
  
    foreach(
$clave as $i){ 
        
$i trim($i); 
        if(!empty(
$i)) $salida[] = $i
    } 
 
    
$num count($salida);  
    for(
$i=0$i $num$i++)  
      
$texto preg_replace("/(".trim($clave[$i]).")/i","<span class='palabra'>\\1</span>",$texto);
        return 
$texto;      


pero sigo con el problema de las tildes.


edito: por el momento agregue esta funciones que me encontre en la pagina de:
http://www.linuxhispano.net/2011/05/...-enes-con-php/


Código PHP:
function normaliza ($cadena){
    
$originales 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ
ßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ'
;
    
$modificadas 'aaaaaaaceeeeiiiidnoooooouuuuy
bsaaaaaaaceeeeiiiidnoooooouuuyybyRr'
;
    
$cadena utf8_decode($cadena);
    
$cadena strtr($cadenautf8_decode($originales), $modificadas);
    
$cadena strtolower($cadena);
    return 
utf8_encode($cadena);

asique primero paso las cadenas por esta funcion y luego por la funcion resaltar, se que ha de haber mejores formas pero mientras vamos aprendiendo todo es bueno. hay caminos cortos y largos....
__________________
:molesto: "Soy como dios k nunca llora y como satanas k nunca resa":molesto:

Dejate seducir por mis colmillos

Última edición por LoUiMaNiAkO; 07/01/2016 a las 12:27 Razón: Agrege funcion
  #6 (permalink)  
Antiguo 07/01/2016, 12:58
 
Fecha de Ingreso: diciembre-2015
Mensajes: 45
Antigüedad: 8 años, 4 meses
Puntos: 3
Respuesta: resaltando palabras de busqueda

:(

Entonces será magia blanca, toma y entiendelo, ChECalo por Se mE van las cabras a veCEs:

Cita:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<style type="text/css">
.palabra
{
color: red;
}
</style>
<?php
function resaltar($buscar, $texto) {
$aux=$reemp=str_ireplace($buscar,'%s',$texto);
$count=substr_count($reemp,'%s');
if($count==0)return $texto;
$textoArray=array();
for($i=0;$i<$count;$i++){
$textoArray[]='<span class="palabra">'.substr($texto,strpos($aux,'%s'), strlen($buscar)).'</span>';
$aux=substr($aux,0,strpos($aux,'%s')).$buscar.subs tr($aux,strlen(substr($aux,0,strpos($aux,'%s')))+2 );
}

return vsprintf($reemp,$textoArray);
}
$variable=resaltar('caNaRio','raton, gato, perro, canario');
echo $variable."<br>";
$variable=resaltar('canario','canario, raton, gato, perro, canario');
echo $variable."<br>";
$variable=resaltar('gato ,+ tortúgà','pªe\rro ,+ gato ,adsfdfs raton, tortuga, gato ,+ tortúgà');
echo $variable."<br>";
$variable=resaltar('canario, perro','raton, gato, perro, canario, perro, gato, perro,');
echo $variable."<br>";
$variable=resaltar('pªe\RrO','pªe\rro ,+ gato ,adsfdfs raton, tortuga, gato ,+ tortúgà');
echo $variable."<br>";
?>
¡Amor y paz!!
  #7 (permalink)  
Antiguo 07/01/2016, 13:30
Avatar de LoUiMaNiAkO  
Fecha de Ingreso: enero-2006
Mensajes: 198
Antigüedad: 18 años, 4 meses
Puntos: 1
Respuesta: resaltando palabras de busqueda

Lo probé pero no resalta las palabras.
__________________
:molesto: "Soy como dios k nunca llora y como satanas k nunca resa":molesto:

Dejate seducir por mis colmillos
  #8 (permalink)  
Antiguo 07/01/2016, 13:57
 
Fecha de Ingreso: diciembre-2015
Mensajes: 45
Antigüedad: 8 años, 4 meses
Puntos: 3
Respuesta: resaltando palabras de busqueda

A ver creo que lo copie mal, ¿Que versión usas de php?

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<style type="text/css">
.palabra
{
color: red;
}
</style>
<?php

function resaltar($buscar, $texto) {

$aux=$reemp=str_ireplace($buscar,'%s',$texto);
$count=substr_count($reemp,'%s');
if($count==0)return $texto;
$textoArray=array();
for($i=0;$i<$count;$i++){
$textoArray[]='<span class="palabra">'.substr($texto,strpos($aux,'%s'), strlen($buscar)).'</span>';
$aux=substr($aux,0,strpos($aux,'%s')).$buscar.subs tr($aux,strlen(substr($aux,0,strpos($aux,'%s')))+2 );
}



return vsprintf($reemp,$textoArray);

}
$variable=resaltar('caNaRio','raton, gato, perro, canario');
echo $variable."<br>";
$variable=resaltar('canario','canario, raton, gato, perro, canario');
echo $variable."<br>";
$variable=resaltar('gato ,+ tortúgà','pªe\rro ,+ gato ,adsfdfs raton, tortuga, gato ,+ tortúgà');
echo $variable."<br>";
$variable=resaltar('canario, perro','raton, gato, perro, canario, perro, gato, perro,');
echo $variable."<br>";
$variable=resaltar('pªe\RrO','pªe\rro ,+ gato ,adsfdfs raton, tortuga, gato ,+ tortúgà');
echo $variable."<br>";
?>
  #9 (permalink)  
Antiguo 07/01/2016, 16:00
 
Fecha de Ingreso: diciembre-2015
Mensajes: 45
Antigüedad: 8 años, 4 meses
Puntos: 3
Respuesta: resaltando palabras de busqueda

A mi me separa un substr sale esto Parse error: syntax error, unexpected T_STRING al copiar y pegar pero arreglando eso me funciona al 100%, mira:

http://subefotos.com/ver/?df512c6e94ef89030355154f421bb69do.png#codigos
  #10 (permalink)  
Antiguo 08/01/2016, 06:46
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: resaltando palabras de busqueda

no es suficiente con agregar el <meta>, también hay que guardar el documento con esa codificación
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #11 (permalink)  
Antiguo 08/01/2016, 14:59
Avatar de LoUiMaNiAkO  
Fecha de Ingreso: enero-2006
Mensajes: 198
Antigüedad: 18 años, 4 meses
Puntos: 1
Respuesta: resaltando palabras de busqueda

Gracias a todos por su ayuda, tengo mi pagina en utf-8 tengo la <meta charset="utf-8">
pero sigue sin colorearme las palabras, ya vi el ejemplo que colgaro donde demuestran que si funciona, eso me hace pensar que podria ser algo de miservidor, por el momento lo dejare asi, (convirtiendo las palabras acentuadas a no acentuadas.

Gracias muchas gracias.
__________________
:molesto: "Soy como dios k nunca llora y como satanas k nunca resa":molesto:

Dejate seducir por mis colmillos
  #12 (permalink)  
Antiguo 08/01/2016, 16:17
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: resaltando palabras de busqueda

Hola, acá encontré esto que creo te puede servir:

http://www.celulaweb.net/2007/05/05/...queda-a-mysql/

Etiquetas: busqueda, palabras
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 13:28.