Ver la versión completa : a alguien que sepa de PHP y formularios
Hola a todos!
El caso es que estoy enviando un formulario vía flash y un archivo PHP que tiene por código:
<?php
$sendTo = "info@xxxxxx.com";
$subject = $_POST["asunto"];
$headers = "From: " . $_POST["Cristalab_Flashform"];
$headers .= "<" . $_POST["email"] . ">\r\n";
$headers .= "Reply-To: " . $_POST["email"];
$message = $_POST["cuerpo"];
mail($sendTo, $subject, $message, $headers);
echo "estado=Mensaje enviado.";
?>
El caso es que los mails me llegan con los acentos y la ñ en símbolos extraños. Hay algo que deba poner en el código o es problema del servidor de mi webmail?
merci!
PD: En el código flash que llama el fichero php pone:
//Declaro las variables para enviar y para recibir
var envio_lv:LoadVars = new LoadVars();
var recibir_lv:LoadVars = new LoadVars();
//Función que envia el forumlario
function enviarMail() {
envio_lv.asunto = asunto_txt.text;
envio_lv.email = email_txt.text;
envio_lv.cuerpo = cuerpo_txt.text;
envio_lv.sendAndLoad("email.php", recibir_lv, "POST");
//Aqui ustedes pueden cambiar de form.php a form.asp dependiendo del servidor
//que usen
}
//Función que procesa los datos recibidos del servidor
recibir_lv.onLoad = function(exito) {
if (exito) {
estado_txt.text = this.estado;
} else {
//Muestra un mensaje de error en negrita
estado_txt.text = "Error en la aplicación de correo";
}
};
Pues posiblemente es porque el flash estará trabajando en un charset y el php en otro. Php suele trabajar en UTF-8 y al recibir el texto en otro distinto te casca los caracteres.
Ahora, no me preguntes si le puedes definir el chatset al flash, y ahora no puedo mirártelo :S
Pues posiblemente es porque el flash estará trabajando en un charset y el php en otro. Php suele trabajar en UTF-8 y al recibir el texto en otro distinto te casca los caracteres.
Ahora, no me preguntes si le puedes definir el chatset al flash, y ahora no puedo mirártelo :S
Por dios bendito. gracias, pero qué lio...
Te lo han dicho perfectamente, es la codificación. Eso lo puedes especificar en tu página HTML (donde tengas el flash) mediante un meta.
Te lo han dicho perfectamente, es la codificación. Eso lo puedes especificar en tu página HTML (donde tengas el flash) mediante un meta.
mil gracias malenco. el caso es que soy SOLO diseñador y el mundo de la programación satura mucho si no dominas. Es decir, no entiendo ni papa. Me podrías poner el código del META para ponerlo en mi html?
gracias!
Prueba poniendo esto en el php, al principio de todo:
header('Content-type: text/html; charset=ISO-8859-1');
A ver si poníendole el charset te lo pilla, sino puedes probar poniendoselo a UTF-8, a ver si estará pasando al revés, que el php está en ISO-8859-1 y tu necesitas UTF-8.
header('Content-type: text/html; charset=UTF-8');
Yo también quiero terminar aportando mi granito de arena:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
veamos: (y gracias)
En el FLASH está esto:
//Declaro las variables para enviar y para recibir
var envio_lv:LoadVars = new LoadVars();
var recibir_lv:LoadVars = new LoadVars();
//Función que envia el forumlario
function enviarMail() {
envio_lv.asunto = asunto_txt.text;
envio_lv.email = email_txt.text;
envio_lv.cuerpo = cuerpo_txt.text;
envio_lv.sendAndLoad("email.php", recibir_lv, "POST");
//Aqui ustedes pueden cambiar de form.php a form.asp dependiendo del servidor
//que usen
}
//Función que procesa los datos recibidos del servidor
recibir_lv.onLoad = function(exito) {
if (exito) {
estado_txt.text = this.estado;
} else {
//Muestra un mensaje de error en negrita
estado_txt.text = "Error en la aplicación de correo";
}
};
en el HTML que contiene el FLASH está esto:
<html lang="es">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
.
.
.
(y lo demás)
y en el PHP he puesto lo que me has dicho:
<?php
header('Content-type: text/html; charset=UTF-8');
$sendTo = "info@xxxxxx.com";
$subject = $_POST["asunto"];
$headers = "From: " . $_POST["Cristalab_Flashform"];
$headers .= "<" . $_POST["email"] . ">\r\n";
$headers .= "Reply-To: " . $_POST["email"];
$message = $_POST["cuerpo"];
mail($sendTo, $subject, $message, $headers);
echo "estado=Mensaje enviado.";
?>
en el HTML y el PHP he puesto el UTF-8 y tb he probado ISO-8859-1. Nada funciona :'(
Descartando eso, creo que el problema esta entonces en el servidor de mail, porque entre flash y php el texto llega bien, no? Lo has probado grabando en un fichero o escribiendo en pantalla o algo? Si eso funciona, de seguro que es el servidor de mail.
Descartando eso, creo que el problema esta entonces en el servidor de mail, porque entre flash y php el texto llega bien, no? Lo has probado grabando en un fichero o escribiendo en pantalla o algo? Si eso funciona, de seguro que es el servidor de mail.
el texto sí llega bien, sólo es la ñ y los acentos. lo de grabar en un fichero o escribir en pantalla no sé a lo que te refieres. pero estoy resfriado, tengo mil ventanas abiertas en el mac, me duele la cabeza y voy a explotaaaaaaaaaarrrrrrrrrrrrrrrrrr!!!!
EL caso es que en el mismo servidor y con un formulario en php y html (sin nada de flash) todo iba bien.
ARGH. mil gracias a todos.
anibarro
13/11/2007, 12:37
Cambia la linea que envia el mail por esta otra, a ver si funciona:
mail($sendTo, $subject, utf8_encode($message), $headers);
Cambia la linea que envia el mail por esta otra, a ver si funciona:
mail($sendTo, $subject, utf8_encode($message), $headers);
así no me deja ni enviar el mail
A lo que se refiere malenko es que uses las funciones fopen y fwrite (eran así, ¿no? xD) para escribir en un fichero lo que te llega a la página php y así comprobar que del flash ya llega con los caracteres especiales mal o no.
<?php
$nombre_archivo = 'prueba.txt';
$gestor = fopen($nombre_archivo, 'a');
fwrite($gestor, $message);
fclose($gestor);
?>
Luego te bajas prueba.txt y miras si está bien o mal.
Si está mal, es que ya del flash llega con un charset diferente del de tu php, sino, es la función mail, y por lo tanto, el servidor de correo, el que está jodiendo los caracteres.
Si eso, prueba lo que ha dicho anibarro en 2 pasos:
$message = utf8_encode($message);
mail($sendTo, $subject, $message, $headers);
A lo que se refiere malenko es que uses las funciones fopen y fwrite (eran así, ¿no? xD) para escribir en un fichero lo que te llega a la página php y así comprobar que del flash ya llega con los caracteres especiales mal o no.
<?php
$nombre_archivo = 'prueba.txt';
$gestor = fopen($nombre_archivo, 'a');
fwrite($gestor, $message);
fclose($gestor);
?>
Luego te bajas prueba.txt y miras si está bien o mal.
Si está mal, es que ya del flash llega con un charset diferente del de tu php, sino, es la función mail, y por lo tanto, el servidor de correo, el que está jodiendo los caracteres.
Si eso, prueba lo que ha dicho anibarro en 2 pasos:
$message = utf8_encode($message);
mail($sendTo, $subject, $message, $headers);
Hola amigos. Entre la decadencia de las incompatibilidades entre servidores, lenguajes de programación y no ser informático, debo tirar la toalla. No ha funcionado nada. Odio ya el PHP!!! y odio aún más a mi servidor. Lo del fwrite no me veo con capacidad mental para llevarlo a cabo. Ya os digo, hice la carrera de Diseño, me faltarían un os cuantos años de estudios para compararme con vosotros, y me pierdo desesperadamente. Mierda al PHP. Mierda a los servidores y viva vosotros, vuestra impresionante ayuda y el MSX basic. Eso almenos, parecía más fácil... [apacigueitor]
Puedes probar esto último? Es para indicarle al servidor que el contenido del texto (body) va en UTF-8:
$headers = "Content-type: text/html; charset=UTF-8\n";
$headers .= "From: " . $_POST["Cristalab_Flashform"];
$headers .= "<" . $_POST["email"] . ">\r\n";
$headers .= "Reply-To: " . $_POST["email"];
El resto dejalo igualito.
Estopero
13/11/2007, 16:08
Hola a todos!
El caso es que estoy enviando un formulario vía flash y un archivo PHP que tiene por código:
<?php
$sendTo = "info@xxxxxx.com";
$subject = $_POST["asunto"];
$headers = "From: " . $_POST["Cristalab_Flashform"];
$headers .= "<" . $_POST["email"] . ">\r\n";
$headers .= "Reply-To: " . $_POST["email"];
$message = $_POST["cuerpo"];
mail($sendTo, $subject, $message, $headers);
echo "estado=Mensaje enviado.";
?>
El caso es que los mails me llegan con los acentos y la ñ en símbolos extraños. Hay algo que deba poner en el código o es problema del servidor de mi webmail?
merci!
prueba a poner el codigo del php asi:
<?php
function fncPasarAISO($cadena){
$v = preg_replace('/[^!-%\x27-;=?-~<>&\x09\x0a\x0d\x0B ]/e', '"&#".ord("$0").chr(59)', $cadena);
$k = preg_replace('/Ã&#([0-9]+);/e', '"&#".((int) \\1 + 64).";"', $v);
return $k;
}
$sendTo = "info@xxxxxx.com";
$subject = fncPasarAISO($_POST["asunto"]);
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; harset=iso-8859-1\r\n";
$headers .= "From: " . $_POST["Cristalab_Flashform"];
$headers .= "<" . $_POST["email"] . ">\r\n";
$headers .= "Reply-To: " . $_POST["email"];
$message = fncPasarAISO($_POST["cuerpo"]);
mail($sendTo, $subject, $message, $headers);
echo "estado=Mensaje enviado.";
?>
tal cual, a ver q sucede =)
tampoco ha funcionado.... :'(
gracias por el esfuerzo Malenko y Estopero...
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.