Foros del Web » Programando para Internet » PHP »

Problema con "str_replace"

Estas en el tema de Problema con "str_replace" en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 03/03/2012, 12:05
Avatar de Heent  
Fecha de Ingreso: diciembre-2008
Mensajes: 140
Antigüedad: 14 años, 9 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!
  #2 (permalink)  
Antiguo 03/03/2012, 12:26
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 3 meses
Puntos: 88
Respuesta: Problema con "str_replace"

prueba colocando un array en el segundo parametro que es el replace, ejemplo
Código PHP:
Ver original
  1. $str = str_replace(
  2.  array('á', 'à', 'ä', 'â', 'ª'),
  3.  array('a','a','a','a','a'),
  4.  $str
  5.  );
así con todos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #3 (permalink)  
Antiguo 03/03/2012, 12:45
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 4 meses
Puntos: 528
Respuesta: Problema con "str_replace"

El problema es la codificación o set de caracteres. Para mayor simpleza, te recomendaría pasar las cadenas a utf8 previamente, con utf8_encode(), al igual que el archivo de tu script, codificarlo en utf8. Para el archivo, no sé qué editor manejes, pero con notepad++ es muy fácil cambiar la codificación.
  #4 (permalink)  
Antiguo 03/03/2012, 15:43
Avatar de novatoide  
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 12 años, 5 meses
Puntos: 13
Respuesta: Problema con "str_replace"

Porba con esto:

En mysql pone los Cotejamiento: utf8 spanish
En php pone un mysql_query("SET NAMES 'utf8'");
En html un <meta charset="utf-8" />

Abrazo.-
  #5 (permalink)  
Antiguo 14/03/2012, 09:58
Avatar de Heent  
Fecha de Ingreso: diciembre-2008
Mensajes: 140
Antigüedad: 14 años, 9 meses
Puntos: 6
Respuesta: Problema con "str_replace"

Cita:
Iniciado por ocp001a Ver Mensaje
El problema es la codificación o set de caracteres. Para mayor simpleza, te recomendaría pasar las cadenas a utf8 previamente, con utf8_encode(), al igual que el archivo de tu script, codificarlo en utf8. Para el archivo, no sé qué editor manejes, pero con notepad++ es muy fácil cambiar la codificación.
Le puse el utf8_encode() antes de nada (al inicio de mi función) pero entonces me devuelve "holãƒâ" :S

Utilizo netbeans.

Un saludo
  #6 (permalink)  
Antiguo 14/03/2012, 11:27
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 2 meses
Puntos: 194
Respuesta: Problema con "str_replace"

yo también uso el netbeans, con iso-8859 me va perfecto tu función.
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #7 (permalink)  
Antiguo 14/03/2012, 12:05
Avatar de Heent  
Fecha de Ingreso: diciembre-2008
Mensajes: 140
Antigüedad: 14 años, 9 meses
Puntos: 6
Respuesta: Problema con "str_replace"

Si le meto un utf8_decode al principio del codigo se muestra bien el resultado pero no me modifica las letras.

Por ejemplo:

Código PHP:
Ver original
  1. echo caracteresNormales ( "hòlá");
  2.       -----------> hòlá

No lo entiendo la verdad :S
  #8 (permalink)  
Antiguo 14/03/2012, 12:09
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 2 meses
Puntos: 194
Respuesta: Problema con "str_replace"

reitero tengo el netbeans al igual que tu, el proyecto en iso-8859

y tu código me funciona a la perfección, por que no intentas ese encoding?

Código PHP:
Ver original
  1. <?php
  2.  
  3. function caracteresNormales($str) {
  4.     $str = trim($str);
  5.     $str = strtolower($str);
  6.  
  7.     //Esta parte se encarga de eliminar cualquier caracter extraño
  8.     $str = str_replace(
  9.             array("\\", "¨", "º", "-", "~",
  10.         "#", "@", "|", "!", "\"",
  11.         "·", "$", "%", "&", "/",
  12.         "(", ")", "?", "'", "¡",
  13.         "¿", "[", "^", "`", "]",
  14.         "+", "}", "{", "¨", "´",
  15.         ">", "<", ";", ",", ":",
  16.         ".", " "), '', $str
  17.     );
  18.  
  19.     $str = str_replace(
  20.             array('á', 'à', 'ä', 'â', 'ª'), "a", $str
  21.     );
  22.  
  23.     $str = str_replace(
  24.             array('é', 'è', 'ë', 'ê'), "e", $str
  25.     );
  26.  
  27.     $str = str_replace(
  28.             array('í', 'ì', 'ï', 'î'), "i", $str
  29.     );
  30.  
  31.     $str = str_replace(
  32.             array('ó', 'ò', 'ö', 'ô'), "o", $str
  33.     );
  34.  
  35.     $str = str_replace(
  36.             array('ú', 'ù', 'ü', 'û'), "u", $str
  37.     );
  38.  
  39.     $str = str_replace('ç', 'c', $str);
  40.  
  41.     $str = str_replace('ñ', 'n', $str);
  42.  
  43.     return $str;
  44. }
  45.  
  46. $test = array("hola+", "hòla", "hölè", "hïí-la", "ho-_@·la", "hólâ");
  47. foreach ($test as $valor) {
  48.     echo caracteresNormales($valor) . "\n";
  49. }
  50. ?>
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #9 (permalink)  
Antiguo 14/03/2012, 12:18
Avatar de Heent  
Fecha de Ingreso: diciembre-2008
Mensajes: 140
Antigüedad: 14 años, 9 meses
Puntos: 6
Respuesta: Problema con "str_replace"

Yo en teoría también lo tengo en iso-8859 pero no me va.

No lo se.


EDITO: ahora si :S

Muchas gracias a todos =)

Etiquetas: caracteres, especiales, str_replace
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:47.