Foros del Web » Programando para Internet » PHP »

preg_match tildes en php insensible

Estas en el tema de preg_match tildes en php insensible en el foro de PHP en Foros del Web. Quiero poner en negrita los términos que coincidan indiferente a mayúsculas, minúsculas y tildadas. Gracias a /i me sirve para mayúsculas y minúsculas pero pese ...
  #1 (permalink)  
Antiguo 29/03/2014, 10:55
 
Fecha de Ingreso: noviembre-2013
Mensajes: 27
Antigüedad: 10 años, 5 meses
Puntos: 1
preg_match tildes en php insensible

Quiero poner en negrita los términos que coincidan indiferente a mayúsculas, minúsculas y tildadas. Gracias a /i me sirve para mayúsculas y minúsculas pero pese a poner /u, no es indiferente con las tildes. Mi meta es que marque en negrita tanto "camión" como "camion". ¿Alguna idea? Este es el código.

Código PHP:
Ver original
  1. <?php
  2. header('Content-Type: text/html; charset=utf-8');
  3. function resaltar($busqueda_para_negrita, $texto_para_negrita)
  4. {
  5.     $claves_para_negrita = explode(" ",$busqueda_para_negrita);
  6.     $clave_para_negrita = $claves_para_negrita;
  7.     $num = count($clave_para_negrita);
  8.     for($i=0; $i < $num; $i++)
  9.         $texto_para_negrita = preg_replace("/(".trim($clave_para_negrita[$i]).")/ui","<b>\\1</b>",$texto_para_negrita);
  10.     return $texto_para_negrita;
  11. }
  12.  
  13. $busqueda = "estas amigo avión mecanicos";
  14. $titulo = "Hola amigo mio que tal estas avion mecÃnico";
  15.  
  16. $titulo = resaltar($busqueda, $titulo);
  17.  
  18. echo "<u>Búsqueda:</u> $busqueda";
  19. echo "<br>";
  20. echo "<u>TÃ*tulo:</u> $titulo";
  21. ?>
  #2 (permalink)  
Antiguo 29/03/2014, 13:51
Avatar de jheckson  
Fecha de Ingreso: febrero-2011
Ubicación: $VE->Aragua['Maracay']
Mensajes: 109
Antigüedad: 13 años, 2 meses
Puntos: 8
Respuesta: preg_match tildes en php insensible

Amigo me costo un buen trabajo, pero al fin lo logre, la cuestion es que los patrones hasta lo que yo se, no son de asemejar los tildes con su contraparte sin tildes (recuerda que es un lenguaje de programacion de origen no latino) por eso siempre hay problemas o trucos para estos.

En fin lo que hice fue, que por cada palabra clave que necesitabas, iba a cambiar las volares por un sub patron que tomara en cuenta las vocales en sus diversas variantes con tildes y sin ellos!

Código PHP:
Ver original
  1. function resaltar($busqueda_para_negrita, $texto_para_negrita)
  2.     {
  3.         $claves_para_negrita = explode(" ",$busqueda_para_negrita);
  4.         $clave_para_negrita = $claves_para_negrita;
  5.         $num = count($clave_para_negrita);
  6.         for($i=0; $i < $num; $i++)
  7.         {
  8.             $clave_para_negrita[$i] = preg_replace('/(i|í|Í|I)/', '(i|í|Í|I)', $clave_para_negrita[$i]);
  9.             $clave_para_negrita[$i] = preg_replace('/(o|O|ó|Ó)/', '(o|ó|Ó|O)', $clave_para_negrita[$i]);
  10.             $clave_para_negrita[$i] = preg_replace('/(a|a|á|Á)/', '(a|a|á|Á)', $clave_para_negrita[$i]);
  11.            
  12.             echo $clave_para_negrita[$i] . '<br/>';
  13.            
  14.             $texto_para_negrita = preg_replace("/(".trim($clave_para_negrita[$i]).")/Ui", "<b>\\1</b>" , $texto_para_negrita);
  15.         }
  16.        
  17.         return $texto_para_negrita;
  18.     }
  19.      
  20.     $busqueda = "estas amigo avión mecanico";
  21.     $titulo = "Hola amigo mio que tal estas avion mecánico";
  22.      
  23.     $titulo = resaltar($busqueda, $titulo);
  24.      
  25.     echo "<u>Búsqueda:</u> $busqueda";
  26.     echo "<br>";
  27.     echo "<u>Título:</u> $titulo";
  28.     ?>

PD: Termina de agregar las demas vocales! =)
  #3 (permalink)  
Antiguo 30/03/2014, 03:48
 
Fecha de Ingreso: noviembre-2013
Mensajes: 27
Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: preg_match tildes en php insensible

Ok. Pero no entiendo el código de las sustuciones de las vocales. ¿El orden no debería ser el mismo en todas y deberían estar todas "aAáÁ" en lugar de "aaáÁ"?

Código PHP:
Ver original
  1. $clave_para_negrita[$i] = preg_replace('/(i|í|Í|I)/', '(i|í|Í|I)', $clave_para_negrita[$i]);
  2.             $clave_para_negrita[$i] = preg_replace('/(o|O|ó|Ó)/', '(o|ó|Ó|O)', $clave_para_negrita[$i]);
  3.             $clave_para_negrita[$i] = preg_replace('/(a|a|á|Á)/', '(a|a|á|Á)', $clave_para_negrita[$i]);
  #4 (permalink)  
Antiguo 30/03/2014, 06:07
Avatar de jheckson  
Fecha de Ingreso: febrero-2011
Ubicación: $VE->Aragua['Maracay']
Mensajes: 109
Antigüedad: 13 años, 2 meses
Puntos: 8
Respuesta: preg_match tildes en php insensible

la sustitucion de las vocales es porque tu utilizas una expresion regular para poner las letras en negritas a travez de una "clave" pero como las expresiones regulares no asemejan las "a" con las "á" hay que reemplzar las volcales por una sub expresion regular para detectar las distintas!

Si deberia ser "aAáÁ" solo que me equivoque, y el orden como tal no importa porque al decir (a|A|á|Á) estas diciendo "a or A or á or Á" asi que no importa si pones (á|A|a|Á) o alguna otra combinacion, con tal que coloques todas las variantes de la vocal funcionara! =)
__________________
Ayudar a otros, es una de las mejores formas de aprender y ayudarse a si mismo! =)

>[Jheck]<

Etiquetas: html, tildes
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 12:55.