Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] eliminar caracteres especiales PHP

Estas en el tema de eliminar caracteres especiales PHP en el foro de PHP en Foros del Web. buenos días; realice un programa en php con una api para envio de mensajes de texto pero requiero a dicho texto eliminarle los caracteres especiales ...
  #1 (permalink)  
Antiguo 25/02/2016, 06:10
Avatar de mager3  
Fecha de Ingreso: junio-2012
Ubicación: Medellin
Mensajes: 318
Antigüedad: 11 años, 10 meses
Puntos: 4
Mensaje eliminar caracteres especiales PHP

buenos días;

realice un programa en php con una api para envio de mensajes de texto pero requiero a dicho texto eliminarle los caracteres especiales (que no deben de ir en un SMS) como tildes, ñ porque cuando se incluyen el mensaje llega como NULL al receptor.

alguna funcion que me permita al guardar en un campo de bd eliminarle dichos caracteres y mm no se reemplazarlo por algun otro.. que me sugieren?
  #2 (permalink)  
Antiguo 25/02/2016, 09:20
Avatar de mager3  
Fecha de Ingreso: junio-2012
Ubicación: Medellin
Mensajes: 318
Antigüedad: 11 años, 10 meses
Puntos: 4
Respuesta: eliminar caracteres especiales PHP

realice algo, pero me funciona a medias:

Código PHP:
Ver original
  1. while ($row=mysql_fetch_array($actualizar_caracteres)){
  2. $mensaje=$row['mensaje'];
  3.  
  4. $no_permitidas= array ("á","é","í","ó","ú","Á","É","Í","Ó","Ú","ñ","À","Ã","Ì","Ò","Ù","Ù","à ","è","ì","ò","ù","ç","Ç","â","ê","î","ô","û","Ã",
  5. "Ê","ÃŽ","Ã","Û","ü","ö","Ö","ï","ä","«","Ò","Ã","Ã","Ë","Ñ","*","%");
  6. $permitidas= array ("a","e","i","o","u","A","E","I","O","U","n","N","A","E","I","O","U","a","e","i","o","u","c","C","a","e","i","o","u","A","E","I","O","U","u","o","O","i","a","e","U","I","A","E","N",".",".");
  7. $texto = str_replace($no_permitidas, $permitidas ,$mensaje);
  8.     $actualizar_nombre=mysql_query("UPDATE datos_mensaje_generico SET mensaje='$texto' WHERE cod_mensaje='".$codigo."'");
  9.  }
Cuando pongo $mensaje en el str_replace NO funciona, pero si tomo el mensaje en texto y en vez de $mensaje pongo "Año, ó tensión" ahi si funciona, porque por variable no funciona y poniendo el texto si??

Última edición por mager3; 25/02/2016 a las 09:21 Razón: corregir una palabra
  #3 (permalink)  
Antiguo 25/02/2016, 09:38
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: eliminar caracteres especiales PHP

Tienes funciones ya hechas para tal fin

Pruebas esta
Código PHP:
Ver original
  1. /**
  2. * Extraido de http://ecapy.com/reemplazar-la-n-acentos-espacios-y-caracteres-especiales-con-php-actualizada/
  3. * Reemplaza todos los acentos por sus equivalentes sin ellos
  4. *
  5. * @param $string
  6. *  string la cadena a sanear
  7. *
  8. * @return $string
  9. *  string saneada
  10. */
  11. function eliminar_simbolos($string){
  12.  
  13.     $string = trim($string);
  14.  
  15.     $string = str_replace(
  16.         array('á', 'à', 'ä', 'â', 'ª', 'Á', 'À', 'Â', 'Ä'),
  17.         array('a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A'),
  18.         $string
  19.     );
  20.  
  21.     $string = str_replace(
  22.         array('é', 'è', 'ë', 'ê', 'É', 'È', 'Ê', 'Ë'),
  23.         array('e', 'e', 'e', 'e', 'E', 'E', 'E', 'E'),
  24.         $string
  25.     );
  26.  
  27.     $string = str_replace(
  28.         array('í', 'ì', 'ï', 'î', 'Í', 'Ì', 'Ï', 'Î'),
  29.         array('i', 'i', 'i', 'i', 'I', 'I', 'I', 'I'),
  30.         $string
  31.     );
  32.  
  33.     $string = str_replace(
  34.         array('ó', 'ò', 'ö', 'ô', 'Ó', 'Ò', 'Ö', 'Ô'),
  35.         array('o', 'o', 'o', 'o', 'O', 'O', 'O', 'O'),
  36.         $string
  37.     );
  38.  
  39.     $string = str_replace(
  40.         array('ú', 'ù', 'ü', 'û', 'Ú', 'Ù', 'Û', 'Ü'),
  41.         array('u', 'u', 'u', 'u', 'U', 'U', 'U', 'U'),
  42.         $string
  43.     );
  44.  
  45.     $string = str_replace(
  46.         array('ñ', 'Ñ', 'ç', 'Ç'),
  47.         array('n', 'N', 'c', 'C',),
  48.         $string
  49.     );
  50.  
  51.     $string = str_replace(
  52.         array("\\", "¨", "º", "-", "~",
  53.              "#", "@", "|", "!", "\"",
  54.              "·", "$", "%", "&", "/",
  55.              "(", ")", "?", "'", "¡",
  56.              "¿", "[", "^", "<code>", "]",
  57.              "+", "}", "{", "¨", "´",
  58.              ">", "< ", ";", ",", ":",
  59.              ".", " "),
  60.         ' ',
  61.         $string
  62.     );
  63. return $string;
  64. }
  65.  
  66. //Ejemplo
  67. $micadena = "ésta cadeña  tiene . Símbolõs";
  68.  
  69. $micadena = eliminar_simbolos($micadena);
  70.  
  71. echo $micadena;
  #4 (permalink)  
Antiguo 25/02/2016, 09:53
Avatar de mager3  
Fecha de Ingreso: junio-2012
Ubicación: Medellin
Mensajes: 318
Antigüedad: 11 años, 10 meses
Puntos: 4
Respuesta: eliminar caracteres especiales PHP

esta super la funcion, pero no se porque no me cambia el texto tampoco con la funcion .. sigue con caracteres cuando uso $string=$row['mensaje']; pero si uso string="esté mensajé tiene años "; si lo toma.... porque puede ser?
  #5 (permalink)  
Antiguo 25/02/2016, 16:09
 
Fecha de Ingreso: agosto-2008
Mensajes: 64
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: eliminar caracteres especiales PHP

aum, ya usaste ?

<meta charset="UTF-8">
  #6 (permalink)  
Antiguo 25/02/2016, 16:39
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: eliminar caracteres especiales PHP

Cita:
Iniciado por mager3 Ver Mensaje
esta super la funcion, pero no se porque no me cambia el texto tampoco con la funcion .. sigue con caracteres cuando uso $string=$row['mensaje']; pero si uso string="esté mensajé tiene años "; si lo toma.... porque puede ser?
Es altamente probable que la información de la base de datos no esté correctamente codificada, ¿usas SET NAMES al conectar o no?

Otra posible razón es, que, en algún punto guardaste el texto mal codificado y ahora estás forzándolo.

Prueba con utf8_encode/decode para ver si eso soluciona el problema.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 25/02/2016, 19:08
 
Fecha de Ingreso: enero-2009
Ubicación: Kandor
Mensajes: 209
Antigüedad: 15 años, 2 meses
Puntos: 11
Respuesta: eliminar caracteres especiales PHP

Primero que nada decirte que eso es un gran problema y hacerlo correctamente casi nunca funciona de forma que sea multiplataforma. Mira esta pagina [URL="http://evertpot.com/filesystem-encoding-and-php/"]http://evertpot.com/filesystem-encoding-and-php/[/URL]

Para que funcione correctamente la codificación para español en linux. Primero tienes que instalarle la codificación en español de tu país al Sistema Operativo. Por ejemplo yo que estoy en México sería utf8_spanish_ci. Muchas distros linux hacen esto en la instalación preguntandote donde vives.

Despues, si estas usando xampp debes configurar apache y php para que usen utf8:

En apache:
[httpd.conf]
AddDefaultCharset utf-8

en algunas versiones de apache no se encuentra AddDefaultCharset en el lugar habitual y tienes que buscar $cfg['DefaultCharset'] = 'utf-8';
en toda la instalacion o variables similares.

En php:
[php.ini]
default_charset = "utf-8"
mbstring.internal_encoding=utf-8
mbstring.http_output=UTF-8
mbstring.encoding_translation=On
mbstring.func_overload=0

Si estas usando una versión superior o igual a php 5.6 estos parametros estan obsoletos:
mbstring.internal_encoding
mbstring.http_input
mbstring.http_output
y basta con poner default_charset = "utf-8"

Si estas usando XML-RPC:
[xmlrpc.inc]
cambia $GLOBALS['xmlrpc_internalencoding']='ISO-8859-1';
por $GLOBALS['xmlrpc_internalencoding']='UTF-8';

Si usas mysql toda la collation de Base de datos y tablas debe ser utf8 - utf8_spanish_ci y en la conexión:
$Conex=new mysqli(.....);
$Conex->set_charset("utf8");

Si usas correo como por ejemplo PHPMailer:
$mail= new PHPMailer();
$mail->CharSet = 'UTF-8';

por ultimo todos tus HTMLs o PHP que usen html tiene que tener:
<meta charset="UTF-8">

Esto funcionara perfectamente en linux pero si tratas de escribir archivos a disco en windows veras que no funciona (lo explica la url que puse hasta arriba). Es entonces cuando hay que recurrir a iconv. Ejemplo:

$nombre="ññ.txt"
$f2=fopen(iconv("UTF-8", "ISO-8859-1",$nombre),"w");
fwrite($f2,$texto);
fclose($f2);

ó

$tam=filesize(iconv("UTF-8", "ISO-8859-1",$nombre));

Creo que así no debería haber problemas. Y el problema de origen es porque los 3 sistemas operativos principales manejan la codificacion de difernete forma.
Espero les sirva.

Última edición por abrahamhs; 25/02/2016 a las 19:26 Razón: error en una url de respuesta
  #8 (permalink)  
Antiguo 26/02/2016, 06:48
Avatar de mager3  
Fecha de Ingreso: junio-2012
Ubicación: Medellin
Mensajes: 318
Antigüedad: 11 años, 10 meses
Puntos: 4
Respuesta: eliminar caracteres especiales PHP

Gracias a todos los que participaron, sin duda alguna si era con codificacion y se soluciono como dijo partertrueke y relacionado a las otras respuestas:

Código PHP:
Ver original
  1. $micadena = utf8_encode($row[1]);
  2.  
  3. $micadena = eliminar_simbolos($micadena);
  4.  
  5. echo $micadena;

Etiquetas: php+base
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 16:08.