Foros del Web » Programando para Internet » PHP »

mandar mail sin caracteres escapados

Estas en el tema de mandar mail sin caracteres escapados en el foro de PHP en Foros del Web. Hola, uso la función mail de php para mandar un contenido en la base de datos, pero al mandar el mail me sale lo siguiente: ...
  #1 (permalink)  
Antiguo 06/06/2011, 15:25
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años
Puntos: 15
mandar mail sin caracteres escapados

Hola, uso la función mail de php para mandar un contenido en la base de datos, pero al mandar el mail me sale lo siguiente:

texto dentro de la base de datos:

alguien dijo "no hay mal que por bien no venga"


texto que me recibo en yahoo:

alguien dijo \"no hay mal que por bien no venga\"

cómo se puede solucionar esto?


otra cosa:

si el asunto del mensaje es por ejemplo España, la ñ me sale con caracteres raros (como chinos) pero el mismo texto en el cuerpo del mensaje me sale bien, porqué puede ser?
  #2 (permalink)  
Antiguo 06/06/2011, 16:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: mandar mail sin caracteres escapados

Muestra tu código es probable que estes usando algún código que le agregue esos slashes.

Saludos.
  #3 (permalink)  
Antiguo 06/06/2011, 16:54
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años
Puntos: 15
Respuesta: mandar mail sin caracteres escapados

realmente no hago nada especial. recojo el campo así:


Código PHP:
Ver original
  1. $newmessage = $_POST['newmessage'];

hago el insert directamente sin hacer más transformaciones.

y lo mando así:


Código PHP:
Ver original
  1. mail($destinatario,$asunto,$mensaje,$encabezado);
el campo mensaje lo he ido construyendo así:

Código PHP:
Ver original
  1. $mensaje  = ...........................
  2. $mensaje .= ............................

vamos, creo no hago nada especial. puede ser por la codificación del archivo .php?

es ANSI

* como digo, el campo se inserta bien en la base de datos, sin los \
  #4 (permalink)  
Antiguo 06/06/2011, 16:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: mandar mail sin caracteres escapados

Me suena a magic_quotes.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 06/06/2011, 16:59
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: mandar mail sin caracteres escapados

Seguro tienes magic_quotes activado en tu PHP.ini
Revísalo

Saludos!

Edito: Pateke ya se me adelantó
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #6 (permalink)  
Antiguo 06/06/2011, 17:10
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años
Puntos: 15
Respuesta: mandar mail sin caracteres escapados

le hago phpinfo() y me sale:

magic_quotes_gpc On On
magic_quotes_runtime Off Off
magic_quotes_sybase Off Off

con lo que entiendo q sí.

según leo hay que hacer:

magic_quotes = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off

esto q lo hago en todas las páginas en las que uso .php?

en tal caso, q problemas puedo tener? beneficios entiendo q son la desaparición de los \

cómo afectaría a la hora de insertar un texto con comillas dobles?

salu2 y gracias
  #7 (permalink)  
Antiguo 06/06/2011, 17:17
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: mandar mail sin caracteres escapados

No es que lo hagas en todas las páginas, si no que lo haces a nivel global modificando la directiva en el php.ini de tu servidor.
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #8 (permalink)  
Antiguo 06/06/2011, 17:58
 
Fecha de Ingreso: diciembre-2008
Ubicación: Vigo, Spain
Mensajes: 141
Antigüedad: 15 años, 4 meses
Puntos: 12
Respuesta: mandar mail sin caracteres escapados

Podrías probar una función que justo encontré hoy, ya que al pasar datos a través del mysql_real_escape_string() los texto con comillas simples o dobles quedan tal cual como los tuyos, ésta función revierte ese proceso quitando las barras, para usarla:

$textosinbarras = mysql_real_unescape_string($textoconbarras,1);

Código PHP:
Ver original
  1. function mysql_real_unescape_string($input, $checkbr) {
  2.  
  3.     $output = $input;
  4.     $output = str_replace("\\\\", "\\", $output);
  5.     $output = str_replace("\'", "'", $output);
  6.     $output = str_replace('\"', '"', $output);
  7.  
  8.     if ($checkbr == 1) {
  9.  
  10.         $output = str_replace('\n\r', '\n', $output);
  11.         $output = str_replace('\r\n', '\n', $output);
  12.         $output = str_replace('\r', '\n', $output);
  13.         $output = str_replace('\n', ' ', $output);
  14.     } else if ($checkbr == 2) {
  15.  
  16.         $output = str_replace('\n\r', '\n', $output);
  17.         $output = str_replace('\r\n', '\n', $output);
  18.         $output = str_replace('\r', '\n', $output);
  19.         $output = str_replace("\n", "<br>", $output);
  20.     }
  21.  
  22.     return $output;
  23. }

Espero que te sirva :p
__________________
Personaliza tu blog, crea, comparte y exporta tus tarjetas de visita
  #9 (permalink)  
Antiguo 06/06/2011, 20:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: mandar mail sin caracteres escapados

Lo mejor es que magic_quotes este en Off, y que tu mismo escapes las comillas como lo necesites usando mysql_real_escape_string o similar.

Saluds.
  #10 (permalink)  
Antiguo 07/06/2011, 04:52
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años
Puntos: 15
Respuesta: mandar mail sin caracteres escapados

o sea que pongo magic_quotes a Off y antes de meter los campos que se supone que tienen comillas, los escapo con addslashes, por lo cual en la base de datos estarán como \" no hay mal que por bien no venga \".

Más tarde, a la hora de mostrar el contenido, lo desescapo con stripcslashes, no?

por cierto acabo de leer que magic_quotes activada evita la inyección de código, entonces... si la desactivo tendré q hacer algo para evitar el código malicioso, no?

es decir es aconsejable realmente desactivar magic_quotes?

Última edición por humanista; 07/06/2011 a las 05:12
  #11 (permalink)  
Antiguo 07/06/2011, 07:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: mandar mail sin caracteres escapados

En lugar de usar addslashes, usa mysql_real_escape_string (o aún mejor usa Prepared Statements) para escapar los datos.

En la base de datos se van a guardar con comillas normales (sin la barra \).

Saludos.
  #12 (permalink)  
Antiguo 07/06/2011, 11:01
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años
Puntos: 15
Respuesta: mandar mail sin caracteres escapados

ah vale, o sea que si dentro de la base de datos el texto está con comillas sólo (sin barras), no necesito hacer nada para sacarlo, un simple echo valdrá.

algún ejemplo de Prepared Statements? he encontrado este link, podría valer?

http://angelfqc.host22.com/blog/2010...as-preparadas/

Código PHP:
Ver original
  1. PREPARE stmt_name FROM preparable_stmt;
  2. EXECUTE stmt_name [USING @var_name [, @var_name] ...];
  3. {DEALLOCATE | DROP} PREPARE stmt_name;

Código PHP:
Ver original
  1. PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
  2.  SET @a = 3;
  3.  SET @b = 4;
  4.  EXECUTE stmt1 USING @a, @b;

Última edición por humanista; 07/06/2011 a las 12:28
  #13 (permalink)  
Antiguo 08/06/2011, 07:54
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años
Puntos: 15
Respuesta: mandar mail sin caracteres escapados

estoy en el buen camino o hay otra forma de hacerlo?
  #14 (permalink)  
Antiguo 08/06/2011, 09:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: mandar mail sin caracteres escapados

Se usa principalmente con el adaptador PDO de PHP:

http://mx2.php.net/manual/es/pdo.pre...statements.php

Etiquetas: caracteres, mail, mandar
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 18:48.