Esto creando una nueva web, y como ya deberíais saber, los desarrolladores de PHP decidieron que la versión 6 funcionaría, por defecto, con el charset utf-8. Los que esteis ya implementando estos cambios en vuestros proyectos, conocereis los quebraderos de cabeza que dan tanto mySQL como PHP sino están bien configurados (uno de ellos lo comente hace un tiempo aquí).

Pues bien, hoy me he topado con otro, que me ha tenido todo el día dandome cabezazos contra la mesa, hasta que por fin he descubierto que leches pasaba.

Todos sabemos para que sirve la función eregi_replace(), (sirve para sustituir una cadena por otra, por si no lo recordabas xD), pues bien, por lo visto el resultado que retorna no muestra los caractéres codificados con UTF-8, ya que esta función no trabajo con UTF-8, así que me ha tocado ponerme el casco de minero y picar consultas en google hasta que he dado con la solución:


//Creamos el texto que vamos a modificar
$texto = 'Esto es una prueba mala';

//Para que la sustitución salga correcta
//primero debemos decodificar el texto en utf-8
//con la funcion utf8_decode() y después
//el resultado de la función eregi_replace()
//codificarla de nuevo a utf8 con utf8_encode()
$resultado = utf8_encode(eregi_replace('mala', 'buena', utf8_decode($texto)));
echo $resultado;

Este bug ya está corregido en el CVS, peeeeroooo no aparecerá hasta la versión 5.3 de PHP, momento que aprovecharán para incorporarlo a la versión 6.

Espero que os haya sido útil.