Desperado, por favor ayuda con otro problema de acentos

Miguelonchas
12 de Mayo del 2005
Estimados foristas:

Acudo a ustedes esperando que algn gur pueda sacarme del apuro. Necesito encontrar una expresin regular (o algn 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 maysculas. Me explico mejor:

Tengo la siguiente cadena:

$string1 = "Conchale";

Y necesito que coincida con cualquiera de estas variantes:

"Cnchale, Conchale, cnchale, 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 funcin 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 "Prez", "Perez","prez" y "perez" (actualmente slo 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 agradecera inmensamente.

Saludos a todos desde Venezuela!

Miguelonchas
12 de Mayo del 2005
Bueno, para los que les pueda servir aqu est la solucin (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;
}

Miguelonchas
12 de Mayo del 2005
Nadie me puede ayudar? :(

mrtnlnx
12 de Mayo del 2005
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...

Miguelonchas
12 de Mayo del 2005
En realidad no estoy buscando nada en una base de datos, las cadenas de texto son recibidas a travs 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!