Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/02/2016, 06:19
Avatar de fbedia
fbedia
 
Fecha de Ingreso: julio-2010
Mensajes: 159
Antigüedad: 13 años, 10 meses
Puntos: 8
str_ireplace y caracter Ñ

Hola foreros!
Estoy haciendo un buscador y pintado de resultados.

El buscador busca correctamente... y los resultados se pintan también correctamente :)

El problema esta, en que al pintar los resultados quiero "resaltar" la cadena de busqueda... y para ello he usado la función str_ireplace.
He usado esta porque es sensible a mayusculas y minusculas.. y me funciona bien en todos los casos que he probado, salvo cuando hay por medio una letra eñe!

Les pongo un ejemplo para que lo testeen:

Código PHP:
<html>
<head>
    <meta charset="UTF-8">
</head>
<body>
<?php

$cadena_1 
"Hola forosdelweb! Probaré con MONTAÑA";

$test_1 "hola";
$test_2 "HOLA";
$test_3 "montaña";
$test_4 "MONTAÑA";
$test_5 "MONTA";
$test_6 "monta";

echo 
str_ireplace($test_1,
"<span style='background-color:#ff9900;'><b>".$test_1."</b></span>",
$cadena_1)."<br/>";

echo 
str_ireplace($test_2,
"<span style='background-color:#ff9900;'><b>".$test_2."</b></span>",
$cadena_1)."<br/>";

echo 
str_ireplace($test_3,
"<span style='background-color:#ff9900;'><b>".$test_3."</b></span>",
$cadena_1)."<br/>";

echo 
str_ireplace($test_4,
"<span style='background-color:#ff9900;'><b>".$test_4."</b></span>",
$cadena_1)."<br/>";

echo 
str_ireplace($test_5,
"<span style='background-color:#ff9900;'><b>".$test_5."</b></span>",
$cadena_1)."<br/>";

echo 
str_ireplace($test_6,
"<span style='background-color:#ff9900;'><b>".$test_6."</b></span>",
$cadena_1)."<br/>";

?>
</body>
</html>
Yo al ejecutar el codigo anterior me devuelve lo siguiente:

hola forosdelweb! Probaré con MONTAÑA
HOLA forosdelweb! Probaré con MONTAÑA
Hola forosdelweb! Probaré con MONTAÑA
Hola forosdelweb! Probaré con MONTAÑA
Hola forosdelweb! Probaré con MONTAÑA
Hola forosdelweb! Probaré con montaÑA

En el test_3, debería de resaltarme también la palabra "montaña".. ya que estoy buscando "montaña" y existe "MONTAÑA" en la cadena...
pero no lo hace :(
Si se fijan, con "hola" y "HOLA" lo hace correctamente...

La verdad que no se me ocurre que hacer...

¿Alguna solucion?

Acepto también cambios de la función str_ireplace.. u algún otro método o funcion que me sugieran.
Yo he probado tambien con
Código PHP:
preg_replace("/($pattern)/i", , ) 
pero me sucede lo mismo que con str_ireplace

Muchas gracias
__________________
Follow me on twitter @franbedia