Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Reemplazar é por e

Estas en el tema de Reemplazar é por e en el foro de PHP en Foros del Web. Hola a todos. Me estoy iniciando en PHP y vengo de Javascript. El caso es que no entiendo porque este snippet no funciona: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 29/10/2014, 12:15
Avatar de blancoarnau  
Fecha de Ingreso: junio-2013
Mensajes: 119
Antigüedad: 11 años, 5 meses
Puntos: 0
Reemplazar é por e

Hola a todos. Me estoy iniciando en PHP y vengo de Javascript. El caso es que no entiendo porque este snippet no funciona:

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. $a = 'qué';
  5. $b = str_replace('é', 'e', $a);
  6.  
  7. echo $b;
  8.  
  9. ?>

El resultado esperado sería:

Código HTML:
Ver original
  1. que

Pero en vez de eso:

Código HTML:
Ver original
  1. qué

Es decir, no hace nada. Tengo la página en UTF-8, es solo la parte de $b que no funciona. ¿Alguna ayudita?
  #2 (permalink)  
Antiguo 29/10/2014, 12:30
 
Fecha de Ingreso: diciembre-2012
Ubicación: Murcia
Mensajes: 329
Antigüedad: 11 años, 11 meses
Puntos: 4
Respuesta: Reemplazar é por e

Código PHP:
$a str_replace("qué""que"$a);
echo 
$a
  #3 (permalink)  
Antiguo 29/10/2014, 12:36
Avatar de blancoarnau  
Fecha de Ingreso: junio-2013
Mensajes: 119
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Reemplazar é por e

No, no. Necesito solo sustituir la e porque esto quiero aplicarlo a diferentes strings en las cuáles habrá diferentes és
  #4 (permalink)  
Antiguo 29/10/2014, 12:45
 
Fecha de Ingreso: octubre-2014
Ubicación: Buenos Aires
Mensajes: 278
Antigüedad: 10 años, 1 mes
Puntos: 12
Respuesta: Reemplazar é por e

Hola Blancoarnau, prueba con esto.

Código PHP:
Ver original
  1. $text = "hola qué tal";
  2.  
  3. $text = strtolower($text);
  4.         //Reemplazamos caracteres especiales latinos
  5.         $find = array('á','é','í','ó','ú','ñ');
  6.         $repl = array('a','e','i','o','u','n');
  7.         $text = str_replace($find,$repl,$text);
  8.  
  9. echo $text;

Espero te sirva.

Saludos.
  #5 (permalink)  
Antiguo 31/10/2014, 05:29
Avatar de blancoarnau  
Fecha de Ingreso: junio-2013
Mensajes: 119
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Reemplazar é por e

Funciona muy bien. El problema es si lo extraigo de un form con $_POST['name']. Luego, si escribo 'hola ¿qué tal?' me aparece esto:

Código HTML:
Ver original
  1. hola ¿que tal?

He probado de incluir:

Código PHP:
Ver original
  1. $input_data = utf8_decode($_POST['number1']);

Pero su resultado:

Código HTML:
Ver original
  1. hola ¿qué tal?

Es decir, exactamente el mismo que el insertado. ¿Alguna ayuda?
  #6 (permalink)  
Antiguo 31/10/2014, 06:44
Avatar de GeekGirl  
Fecha de Ingreso: julio-2014
Mensajes: 423
Antigüedad: 10 años, 4 meses
Puntos: 44
Respuesta: Reemplazar é por e

Tenés que usar utf8_encode().

Código PHP:
<?php
  $prueba 
= isset($_POST['prueba']) ? $_POST['prueba'] : false;

  
$prueba utf8_encode($prueba);
  
$prueba strtolower($prueba);
        
//Reemplazamos caracteres especiales latinos
        
$find = array('á','é','í','ó','ú','ñ');
        
$repl = array('a','e','i','o','u','n');
        
$prueba str_replace($find,$repl,$prueba);

  echo 
$prueba.'<br />';
?>
Saludos
  #7 (permalink)  
Antiguo 31/10/2014, 08:05
Avatar de jodatelo  
Fecha de Ingreso: marzo-2010
Ubicación: Ecuador
Mensajes: 65
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Reemplazar é por e

concuerdo con la respuesta de GeekGirl solo usa utf8_encode
<?php echo (utf8_encode("Qué haces?")); ?>
  #8 (permalink)  
Antiguo 31/10/2014, 08:54
Avatar de blancoarnau  
Fecha de Ingreso: junio-2013
Mensajes: 119
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Reemplazar é por e

El resultado es cien veces peor:

Código HTML:
Ver original
  1. hola ÿqué tal?
  #9 (permalink)  
Antiguo 31/10/2014, 09:01
Avatar de GeekGirl  
Fecha de Ingreso: julio-2014
Mensajes: 423
Antigüedad: 10 años, 4 meses
Puntos: 44
Respuesta: Reemplazar é por e

Qué charset tenés definido en tu web?
  #10 (permalink)  
Antiguo 31/10/2014, 09:16
Avatar de blancoarnau  
Fecha de Ingreso: junio-2013
Mensajes: 119
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Reemplazar é por e

El charset es utf-8
  #11 (permalink)  
Antiguo 31/10/2014, 09:40
Avatar de GeekGirl  
Fecha de Ingreso: julio-2014
Mensajes: 423
Antigüedad: 10 años, 4 meses
Puntos: 44
Respuesta: Reemplazar é por e

Probá entonces con htmlspecialchars:

Código PHP:
<?php
  $prueba 
= isset($_POST['prueba']) ? $_POST['prueba'] : false;

  
$prueba htmlspecialchars($prueba);
  
$prueba strtolower($prueba);
  
$find = array('á','é','í','ó','ú','ñ');
  
$repl = array('a','e','i','o','u','n');
  
$prueba str_replace($find,$repl,$prueba);

  echo 
$prueba.'<br />';
?>
  #12 (permalink)  
Antiguo 31/10/2014, 09:50
Avatar de blancoarnau  
Fecha de Ingreso: junio-2013
Mensajes: 119
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Reemplazar é por e

¡Ahora funciona! Pero el resultado tiene un pequeño inconveniente:

Código HTML:
Ver original
  1. hola ¿que tal?

Ante el interrogante invertido aparece una Â.

Última edición por blancoarnau; 31/10/2014 a las 10:03
  #13 (permalink)  
Antiguo 31/10/2014, 10:06
Avatar de GeekGirl  
Fecha de Ingreso: julio-2014
Mensajes: 423
Antigüedad: 10 años, 4 meses
Puntos: 44
Respuesta: Reemplazar é por e

Probá añadiendo el signo de pregunta invertido a la lista de caracteres a reemplazar, reemplazándolo por su entidad. Es también un caracter latino y puede traer inconvenientes.

Código PHP:
<?php
    $find 
= array('á','é','í','ó','ú','ñ''¿');
    
$repl = array('a','e','i','o','u','n''&iquest;');
?>
  #14 (permalink)  
Antiguo 31/10/2014, 10:15
Avatar de blancoarnau  
Fecha de Ingreso: junio-2013
Mensajes: 119
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Reemplazar é por e

Código PHP:
Ver original
  1. $signos = array('.',',',':',';','-','_','^','*','/','+','¿','?','@','#','|','"','\'','\\','·','¬','$','~','{','}','[',']','`','´','¨','%','=','!','¡');
  2.  
  3. $prueba = str_replace($signos, '', $prueba);

Lo hice pero me elimina todos los cáracteres excepto los latinos (¡,¿,etc.).
  #15 (permalink)  
Antiguo 31/10/2014, 11:20
Avatar de GeekGirl  
Fecha de Ingreso: julio-2014
Mensajes: 423
Antigüedad: 10 años, 4 meses
Puntos: 44
Respuesta: Reemplazar é por e

No lo estarás aplicando bien. Hacé directamente así y debería funcionar

Código PHP:
<?php
  $prueba 
htmlspecialchars($prueba);
  
$prueba strtolower($prueba);
  
$find = array('á','é','í','ó','ú','ñ');
  
$repl = array('a','e','i','o','u','n');
  
$signos = array('.',',',':',';','-','_','^','*','/','+','¿','?','@','#','|','"','\'','\\','·','¬','$','~','{','}','[',']','`','´','¨','%','=','!','¡');
  
$prueba str_replace($find,$repl,$prueba);
  
$prueba str_replace($signos,'',$prueba);

  echo 
$prueba.'<br />';
?>
Si querés que sólo remplace los latinos, editá el array y dejá solamente esos.
  #16 (permalink)  
Antiguo 31/10/2014, 12:16
Avatar de blancoarnau  
Fecha de Ingreso: junio-2013
Mensajes: 119
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Reemplazar é por e

Muchas gracias. Funciona.

Etiquetas: reemplazar
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 21:37.