Foro oficial de PHP

Hola

Lo que conozco de PHP es casi nada, tengo un problema de tildes que no se como solucionar. Espero que me puedan dar alguna orientación.

Tengo un formulario de contacto en Flash el cual recoge los datos en variables y envia el contenido de esas variables a un archivo PHP para que se envie un correo electrónico con esa información recolectada. En Flash las variables salen con tildes sin ningun problema.

Para el envio del correo tengo este archivo PHP

attachment.php


Como pueden ver tengo una variable email_body que contiene todo el cuerpo del mensaje y hay unos títulos predeterminados que contienen tildes.

El correo me está llegando así

attachment.php


Los títulos predeterminados llegan bien pero si en algun campo o en el cuerpo del mensaje escriben con tildes entonces llega pura basura :S

Si le quito las tildes a los titulos entonces el mensaje llega bien.

attachment.php


Lo que yo quiero es tener en el mensaje los títulos y lo que escribió el usuario todo con tildes.

Qué se puede hacer en ese caso?

Gracias
 

Archivos adjuntos

  • Untitled.png
    Untitled.png
    32.3 KB · Visitas: 292
  • Untitled1.png
    Untitled1.png
    5.8 KB · Visitas: 311
  • Untitled2.png
    Untitled2.png
    4 KB · Visitas: 309
Oesoto, también pruebe cambiando la codificación o de la página, por defecto se encuentra en UTF-8 que es la estándar del W3C, lo puede cambiar a ISO-8859-1 que es la definida para hispanohablantes. Esta se define en la etiqueta meta al principio de la página:

Código:
<meta content="text/html; charset="iso-8859-1" http-equiv="Content-Type" />

Lo que hace arthvrian en la opción 2 es lo que yo hago generalmente, para no tener que lidiar con charsets. Es la que mejor compatibilidad da con la mayoria de paginas.
 
Gracias por las respuesta. Como debo poner exactamente las equivalencias en el código PHP que tengo?
 
Gracias por las respuesta. Como debo poner exactamente las equivalencias en el código PHP que tengo?
reemplazar la linea, segun opcion
opcion 1:
PHP:
$extra = "From: ".$sender."\r\n Reply-To: ".$sender."\r\n X-Mailer: PHP/".phpversion()." MIME-Version: 1.0\n . Content-type: text/html; charset=UTF-8";
opcion 2:
PHP:
$email_body = "Nombre: ".$contact_name."\n Email: ".$sender."\n Direcci&oacute;n: ".$contact_direc."\n Tel&eacute;fono: ".$contact_tele."\n Pa&iacute;s: ".$contact_pais."\n Ciudad: ".$contact_ciudad."\n Proyecto de inter&eacute;s: ".$contact_proyecto."\n\n Mensaje:\n".$contact_message."\n\nIP: ".$client_ip;

opcion 3 :p:
PHPMailer
http://sourceforge.net/projects/phpmailer/files/phpmailer for php5_6/
 
yo utilizo esta funcion:

PHP:
	function acentos($cadena)
	{
		$cadena = ereg_replace("á","&aacute;",$cadena);
		$cadena = ereg_replace("à","&aacute;",$cadena);
		$cadena = ereg_replace("é","&eacute;",$cadena);
		$cadena = ereg_replace("è","&eacute;",$cadena);
		$cadena = ereg_replace("í","&iacute;",$cadena);
		$cadena = ereg_replace("ì","&iacute;",$cadena);
		$cadena = ereg_replace("ó","&oacute;",$cadena);
		$cadena = ereg_replace("ò","&oacute;",$cadena);
		$cadena = ereg_replace("ú","&uacute;",$cadena);
		$cadena = ereg_replace("ù","&uacute;",$cadena);
		$cadena = ereg_replace("ñ","&ntilde;",$cadena);
		$cadena = ereg_replace("Á","&Aacute;",$cadena);
		$cadena = ereg_replace("É","&Eacute;",$cadena);
		$cadena = ereg_replace("Í","&Iacute;",$cadena);
		$cadena = ereg_replace("Ó","&Oacute;",$cadena);
		$cadena = ereg_replace("Ú","&Uacute;",$cadena);
		$cadena = ereg_replace("Ñ","&Ntilde;",$cadena);
		$cadena = ereg_replace("“","\"",$cadena);
		$cadena = ereg_replace("”","\"",$cadena);
		$cadena = ereg_replace("º","&ordm;",$cadena);
		//echo $cadena1;
		return $cadena;
	}		

// Y aqui lo que traigo del formulario convierto las tildes usando la funcion

$titulo=acentos($_POST["titulo"]);
 
yo utilizo esta funcion:

PHP:
	function acentos($cadena)
	{
		$cadena = ereg_replace("á","&aacute;",$cadena);
		$cadena = ereg_replace("à","&aacute;",$cadena);
		$cadena = ereg_replace("é","&eacute;",$cadena);
		$cadena = ereg_replace("è","&eacute;",$cadena);
		$cadena = ereg_replace("í","&iacute;",$cadena);
		$cadena = ereg_replace("ì","&iacute;",$cadena);
		$cadena = ereg_replace("ó","&oacute;",$cadena);
		$cadena = ereg_replace("ò","&oacute;",$cadena);
		$cadena = ereg_replace("ú","&uacute;",$cadena);
		$cadena = ereg_replace("ù","&uacute;",$cadena);
		$cadena = ereg_replace("ñ","&ntilde;",$cadena);
		$cadena = ereg_replace("Á","&Aacute;",$cadena);
		$cadena = ereg_replace("É","&Eacute;",$cadena);
		$cadena = ereg_replace("Í","&Iacute;",$cadena);
		$cadena = ereg_replace("Ó","&Oacute;",$cadena);
		$cadena = ereg_replace("Ú","&Uacute;",$cadena);
		$cadena = ereg_replace("Ñ","&Ntilde;",$cadena);
		$cadena = ereg_replace("“","\"",$cadena);
		$cadena = ereg_replace("”","\"",$cadena);
		$cadena = ereg_replace("º","&ordm;",$cadena);
		//echo $cadena1;
		return $cadena;
	}		

// Y aqui lo que traigo del formulario convierto las tildes usando la funcion

$titulo=acentos($_POST["titulo"]);

http://php.net/manual/en/function.htmlentities.php
 
opcion 2:
PHP:
$email_body = "Nombre: ".$contact_name."\n Email: ".$sender."\n Direcci&oacute;n: ".$contact_direc."\n Tel&eacute;fono: ".$contact_tele."\n Pa&iacute;s: ".$contact_pais."\n Ciudad: ".$contact_ciudad."\n Proyecto de inter&eacute;s: ".$contact_proyecto."\n\n Mensaje:\n".$contact_message."\n\nIP: ".$client_ip;


yo utilizo esta funcion:

PHP:
	function acentos($cadena)
	{
		$cadena = ereg_replace("á","&aacute;",$cadena);
		$cadena = ereg_replace("à","&aacute;",$cadena);
		$cadena = ereg_replace("é","&eacute;",$cadena);
		$cadena = ereg_replace("è","&eacute;",$cadena);
		$cadena = ereg_replace("í","&iacute;",$cadena);
		$cadena = ereg_replace("ì","&iacute;",$cadena);
		$cadena = ereg_replace("ó","&oacute;",$cadena);
		$cadena = ereg_replace("ò","&oacute;",$cadena);
		$cadena = ereg_replace("ú","&uacute;",$cadena);
		$cadena = ereg_replace("ù","&uacute;",$cadena);
		$cadena = ereg_replace("ñ","&ntilde;",$cadena);
		$cadena = ereg_replace("Á","&Aacute;",$cadena);
		$cadena = ereg_replace("É","&Eacute;",$cadena);
		$cadena = ereg_replace("Í","&Iacute;",$cadena);
		$cadena = ereg_replace("Ó","&Oacute;",$cadena);
		$cadena = ereg_replace("Ú","&Uacute;",$cadena);
		$cadena = ereg_replace("Ñ","&Ntilde;",$cadena);
		$cadena = ereg_replace("“","\"",$cadena);
		$cadena = ereg_replace("”","\"",$cadena);
		$cadena = ereg_replace("º","&ordm;",$cadena);
		//echo $cadena1;
		return $cadena;
	}		

// Y aqui lo que traigo del formulario convierto las tildes usando la funcion

$titulo=acentos($_POST["titulo"]);

Muchas gracias a los dos. Sin embargo el problema persiste usando ambas soluciones. El correo llega así.

Direcci&oacute;n: dsfgds
Tel&eacute;fono: fdgfd

No está haciendo la conversión necesaria :\
 
Oesoto... considere la 2a opción que le ha sugerido arthvrian...

agregue:
$extra = 'MIME-Version: 1.0' . "\r\n";
$extra .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

$extra .= 'From ... bla bla bla ... . phpversion();

...
 
Oesoto... considere la 2a opción que le ha sugerido arthvrian...

agregue:
$extra = 'MIME-Version: 1.0' . "\r\n";
$extra .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

$extra .= 'From ... bla bla bla ... . phpversion();

...

No me funcionó :( las tildes de los títulos predeterminados aparecen pero las tildes de los textos traidos desde Flash aparecen corruptos :s
 
No me funcionó :( las tildes de los títulos predeterminados aparecen pero las tildes de los textos traidos desde Flash aparecen corruptos :s
pues yo acabo de hacer la prueba con esto:

PHP:
    $email_body = "Nombre: ".$contact_name."\n Email: ".$sender."\n Dirección: ".$contact_direc."\n Teléfono: ".$contact_tele."\n País: ".$contact_pais."\n Ciudad: ".$contact_ciudad."\n Proyecto de interés: ".$contact_proyecto."\n\n Mensaje:\n".$contact_message."\n\nIP: ".$client_ip;
     $extra = "From: ".$sender."\r\n Reply-To: ".$sender."\r\n X-Mailer: PHP/".phpversion()." MIME-Version: 1.0\n Content-type: text/html; charset=iso-UTF-8";

y me llego bien a gmail

ahora, no estoy seguro y es poco problable pero puede ser que al hacer el post del formulario pase algo que convierta las tildes, prueba haciendo un

PHP:
var_dump($_POST):

(puede ser al principio de la pagina) a ver que imprime
 
Agregué la linea que me dió y terminando en 2 puntos el archivo Flash del formulario de contacto se queda esperando respuesta del archivo PHP para determinar si se envio el correo o no y nunca la recibe. A la bandeja de entrada no llega nada. Con ; el mensaje llega igualmente malo y el archivo PHP retorna un Success = no cuando debería retornar un yes y el formulario erroneamente indica que falló el envio del correo :\

No se que mas hacerle a esto. La información es tomada desde Flash sin problema puesto que hay alguna manera de reproducirla en el archivo PHP pero no deja combinar textos estáticos con tildes con variables que contienen cadenas de texto con tildes :s
 
Agregué la linea que me dió y terminando en 2 puntos el archivo Flash del formulario de contacto se queda esperando respuesta del archivo PHP para determinar si se envio el correo o no y nunca la recibe. A la bandeja de entrada no llega nada. Con ; el mensaje llega igualmente malo y el archivo PHP retorna un Success = no cuando debería retornar un yes y el formulario erroneamente indica que falló el envio del correo :\

No se que mas hacerle a esto. La información es tomada desde Flash sin problema puesto que hay alguna manera de reproducirla en el archivo PHP pero no deja combinar textos estáticos con tildes con variables que contienen cadenas de texto con tildes :s
hummm, no habia caido en cuenta que era desde flash
obviamente asi no se puede usar el var_dump

si quiere paseme los archivos y pruebo a ver si descubrimos el por que del error

saludos
 
Le acabo de enviar un MP con todo el material. Muchas gracias!
pues el PHP no fue el culpable :p

PHP recibia las variables como se muestran en los ejemplos dados (visto gracias a firefox y firebug ;)), el problema entonces era de Flash xD

ahora, el problema en el Flash esta en la linea del URLLoaderDataFormat, esta TEXT y debe ser VARIABLES, solo es cosa de cambiarlo y ya :p

afortunadamente estaba el .fla :)

saludos
 
Hola amigos laneros (yo de nuevo por estos lares :p)

Tengo una duda sobre secciones en el servidor (session). La cosa es que sé que para manipular el tiempo de duración de una session puedo utilizar este script:
PHP:
$horas = 72; //la cantidad de horas que quieres que duren tus sesiones como mínimo teniendo en cuenta que el usuario no cierre el navegador, porque de esa forma se pierde la session)
$tiempo = $horas * 3600;
ini_set("session.gc_maxlifetime",$tiempo);
session_start();
Mi duda es, en lo próximos archivos que utilicen session, solo habría que dar session_start(); ¿verdad? o hay que seguir definiendo el tiempo en todos los archivos que utilicen session?
 

Los últimos temas