Desperado, por favor ayuda con otro problema de acentos
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:
$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):
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"). Eliminar los acentos en la cadena original obviamente no me sirve. Si hay alguien que sepa como puedo hacerlo, se lo agradecería inmensamente.
Saludos a todos desde Venezuela!
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:
$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):
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"). Eliminar los acentos en la cadena original obviamente no me sirve. Si hay alguien que sepa como puedo hacerlo, se lo agradecería inmensamente.
Saludos a todos desde Venezuela!
Bueno, para los que les pueda servir aquí está la solución (gracias mil a fran86 de forosdelweb):
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;
}
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;
}
En que base d edatos realizas la busqueda.. por si es para MYSQl lo puede hacer con el LIKE y en postgresq solo para que sean indiferentes las mayusculas con este operardor.. ~~* o en donde estas realizando tus busquedas...
En realidad no estoy buscando nada en una base de datos, las cadenas de texto son recibidas a través de un formulario. Lo que yo necesito es una manera de comparar esas dos cadenas, y encontrar coincidencias entre dos palabras que sean iguales sin importar si tienen acento o no.
Gracias por la ayuda!
Gracias por la ayuda!