Foros del Web » Programando para Internet » PHP »

Por favor ayuda con otra de acentos, pero esta vez al revés :P

Estas en el tema de Por favor ayuda con otra de acentos, pero esta vez al revés :P en el foro de PHP en Foros del Web. Estimados foristas: Acudo a ustedes esperando que algún gurú pueda sacarme del apuro. Necesito encontrar una expresión regular (o algún metodo similar) que me permita ...
  #1 (permalink)  
Antiguo 09/05/2005, 12:19
 
Fecha de Ingreso: mayo-2005
Mensajes: 8
Antigüedad: 18 años, 11 meses
Puntos: 0
Por favor ayuda con otra de acentos, pero esta vez al revés :P

Estimados foristas:

Acudo a ustedes esperando que algún gurú pueda sacarme del apuro. Necesito encontrar una expresión regular (o algún metodo similar) que me permita hacer coincidir dos cadenas de texto sin importar que la cadena a buscar tenga o no acentos y esté o no en mayúsculas. Me explico mejor:

Tengo la siguiente cadena:

Código PHP:
$string1 "Conchale"
Y necesito que coincida con cualquiera de estas variantes:

"Cónchale, Conchale, cónchale, conchale"

Actualmente mi script es así (es una funcion que resalta las palabras encontradas en una cadena de texto):

Código PHP:
function doHighlight($srchTerms,$haystack) {
    
$srchArray=  explode(" ",$srchTerms);
    
$needle join('|',$srchArray);
    
$text preg_replace("/($needle)/i","<b>\\0</b>",$haystack);
    return 
$text;

Esta función recibe una cadena ($srchTerms, por ejemplo "hola mundo"), la separa en palabras y luego la convierte en los elementos a buscar dentro de la segunda cadena ($haystack, por ejemplo "Hola todo el mundo de pie"). Todo funciona perfectamente hasta que se ingresa una cadena como "Perez", ya que necesito que coincida con "Pérez", "Perez","pérez" y "perez" (actualmente sólo conicide con "Perez" y "perez").

Buscando en este y otros foros he encontrado varias expresiones para hacer coincidir palabras con acento con aquellas que no lo tienen eliminando previamente los acentos, pero en este caso lo que necesito es exactamente lo contrario y además no puedo eliminar los acentos de la cadena original. Si hay alguien que sepa como puedo hacerlo, se lo agradecería inmensamente.

Saludos a todos desde Venezuela!
  #2 (permalink)  
Antiguo 12/05/2005, 06:21
 
Fecha de Ingreso: mayo-2005
Mensajes: 8
Antigüedad: 18 años, 11 meses
Puntos: 0
¿Nadie...? :(
  #3 (permalink)  
Antiguo 12/05/2005, 06:44
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 19 años, 1 mes
Puntos: 17
y además no puedo eliminar los acentos de la cadena original. <---- ¿Por qué no lo puedes borrar de la variable donde recuperás los datos? Entiendo que no lo puedas borrar de la DB, pero puedes compararlo con eliminaracentos($cadena); o no?
  #4 (permalink)  
Antiguo 12/05/2005, 09:45
 
Fecha de Ingreso: mayo-2005
Mensajes: 8
Antigüedad: 18 años, 11 meses
Puntos: 0
En realidad me refería a que si elimino los acentos de la cadena original (que es la que se imprime), "Andrés" se convertiría en "Andres" y "González" en "Gonzalez", cosa que no sería adecuada (la solución sería peor que el problema!) :)

Además debo aclarar que la información no se está recuperando de una base de datos, la cadena $srchTerms se ingresa en un formulario y $haystack (que es la cadena original) es un texto "estático" (texto en una tabla html que paso a PHP usando javascript).

Gracias de cualquier forma por el comentario!
  #5 (permalink)  
Antiguo 12/05/2005, 10:33
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Aver... despues de un rato llegue a esto.
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_ireplace($busca$reemplaza$needle);

    
$text preg_replace("/($needle)/i","<b>\\0</b>"$haystack); 
    return 
$text

Habria que "debuggearlo" un poco.... ya que no esta probado.... pero la idea está...
  #6 (permalink)  
Antiguo 12/05/2005, 12:40
 
Fecha de Ingreso: mayo-2005
Mensajes: 8
Antigüedad: 18 años, 11 meses
Puntos: 0
Estimado fran86:

No sé como agradecerte tu generosa ayuda, ya probé la función y trabaja a las mil maravillas. Noté que en lugar de convertir la cadena a un arreglo y luego volverlo a juntar con la |, simplemente haces el reemplazo de espacios con ese caracter, lo cual es mucho más eficiente y sencillo de computar. Si no te importa, publicaré la solución (con tu crédito claro) en un par de foros más donde había posteado este mismo problema. Gracias nuevamente, llevaba días rompiéndome la cabeza con esto!

Proteo.
  #7 (permalink)  
Antiguo 13/05/2005, 09:58
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
No soy de "agradecer agradecimientos", pero realmente es buena tu cordialidad.

Y si... para nada me importa que repartas el codigo por donde se te antoje!

Saludos!
  #8 (permalink)  
Antiguo 13/05/2005, 10:28
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 21 años, 1 mes
Puntos: 1
No entiendo muy bien yo pongo

doHighlight("hola mundo","hola todo el mundo de pie"); y no me devuelve nada, creo quen o entendi muy bien la funcion jejeje

Un Saludo
  #9 (permalink)  
Antiguo 15/05/2005, 11:33
 
Fecha de Ingreso: mayo-2005
Mensajes: 8
Antigüedad: 18 años, 11 meses
Puntos: 0
Prueba de esta manera:

echo doHighlight("hola mundo","hola todo el mundo de pie");

Debe devolverte:

hola todo el mundo de pie
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 18:44.