Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/03/2012, 12:05
Avatar de Heent
Heent
 
Fecha de Ingreso: diciembre-2008
Mensajes: 140
Antigüedad: 15 años, 4 meses
Puntos: 6
Pregunta Problema con "str_replace"

Hola compañeros, tengo un problema con la función str_replace.

He hecho yo una función para convertir las letras especiales (con tildes y ñ) a letras normales, por ejemplo:

"hòla" => "hola"
"eñe" => "ene"

Lo hago con str_replace. Aquí está el código de dicha función:


Código PHP:
Ver original
  1. function caracteresNormales ( $str) {
  2. $str = trim($str);
  3.     $str = strtolower($str);
  4.  
  5.     //Esta parte se encarga de eliminar cualquier caracter extraño
  6.    $str = str_replace(
  7.         array("\\", "¨", "º", "-", "~",
  8.              "#", "@", "|", "!", "\"",
  9.              "·", "$", "%", "&", "/",
  10.              "(", ")", "?", "'", "¡",
  11.              "¿", "[", "^", "`", "]",
  12.              "+", "}", "{", "¨", "´",
  13.              ">", "<", ";", ",", ":",
  14.              ".", " "),
  15.         '',
  16.         $str
  17.     );
  18.    
  19.     $str = str_replace(
  20.         array('á', 'à', 'ä', 'â', 'ª'),
  21.         "a",
  22.         $str
  23.     );
  24.  
  25.     $str = str_replace(
  26.         array('é', 'è', 'ë', 'ê'),
  27.        "e",
  28.         $str
  29.     );
  30.  
  31.     $str = str_replace(
  32.         array('í', 'ì', 'ï', 'î'),
  33.         "i",
  34.         $str
  35.     );
  36.  
  37.     $str = str_replace(
  38.         array('ó', 'ò', 'ö', 'ô'),
  39.         "o",
  40.         $str
  41.     );
  42.  
  43.     $str = str_replace(
  44.         array('ú', 'ù', 'ü', 'û'),
  45.         "u",
  46.         $str
  47.     );
  48.  
  49.     $str = str_replace('ç','c', $str);
  50.    
  51.     $str = str_replace('ñ', 'n', $str);
  52.  
  53.     return $str;
  54.  
  55. }

El problema es que solo me hace correctamente el str_replace en el primer caso (el de caracteres especiales). Aquí les dejo un ejemplo:

Código PHP:
Ver original
  1. array("hola+", "hòla", "hölè", "hïí-la", "ho-_@·la", "hólâ");
  2. //aplicamos la funcion.
  3. //retorno:
  4. hola, hã²la, hã¶lã¨, hã¯ã*la, ho_â·la, hã³lã¢

No entiendo porque no funciona. Si hago fuera de mi función el str_replace de las o si que funciona :S

muchas gracias!