Foros del Web » Programando para Internet » PHP »

Caracteres latinos no se escriben correctamente en formularios

Estas en el tema de Caracteres latinos no se escriben correctamente en formularios en el foro de PHP en Foros del Web. Hola a todos! El motivo de mi mensaje es que estoy armando un sitio en castellano utilizando UTF-8 en el charset y hasta ahi todo ...
  #1 (permalink)  
Antiguo 26/07/2011, 07:14
 
Fecha de Ingreso: febrero-2010
Mensajes: 11
Antigüedad: 14 años, 9 meses
Puntos: 0
Caracteres latinos no se escriben correctamente en formularios

Hola a todos!

El motivo de mi mensaje es que estoy armando un sitio en castellano utilizando UTF-8 en el charset y hasta ahi todo sin problemas.

Ocurre que en los formularios del sitio, luego de completar la información en los campos, estos sustituyen los caracteres latinos (ñ, é, é, í, etc.) de modo equivocado, por ejemplo á, é,*ñ, etc.

Esto sucede cuando recibo el mensaje, tanto en los campos que escribe el PHP para identificarlos en el mail como en el texto completado por el usuario.

A conitinuacion les dejo el codigo que estoy usando antes de abrir el head, a ver si me pueden ayudar:

Código:
<?php 
$your_email ='[email protected]';

session_start();
$errors = '';
$name = '';
$visit_email = '';
$user_message = '';
$name_0 = '';
$visit_email_0 = '';
$user_message_0 = '';

// INICIO CODIGO FORM SIDEBAR 
if(isset($_POST['submit_side']))
{
	$name = $_POST['name'];
	$visit_email = $_POST['email'];
	$tel = $_POST['tel'];
	$host1 = $_POST['hostini'];
	$host2 = $_POST['hostava'];
	$host3 = $_POST['hostpre'];
	$registro = $_POST['regi'];
	$emailing = $_POST['mailing'];
	$otros = $_POST['otros'];
	$user_message = $_POST['message'];
	
	///------------Do Validations-------------
	if(empty($name)||empty($visit_email))
	{
		$errors .= "Name and Email are required fields. ";	
	}
	if(IsInjected($visit_email))
	{
		$errors .= "Bad email value!";
	}
	if(empty($_SESSION['6_letters_code'] ) ||
	  strcasecmp($_SESSION['6_letters_code'], $_POST['6_letters_code']) != 0)
	{
		$errors .= "El código de verificación no coincide!";
	}
	
	if(empty($errors))
	{
		//send the email
		$to = $your_email;
		$subject="Consulta rápida > Lightfaro hosting";
		$from = $your_email;
		$ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
		
		$body  = "$name ha enviado la siguiente consulta desde Lightfarohosting.com\n\n".
		"Nombre: $name\n".
		"e-mail: $visit_email\n".
		"Tel.: $tel\n\n".
		"SERVICIO/S DE INTERES:\n".
		"$host1 - $host2 - $host3 - $registro - $emailing - $otros\n\n".
		"Conmentarios:\n".
		"$user_message\n\n".
		"IP: $ip\n";	
		
		$headers = "From: $visit_email \r";
				
		mail($to, $subject, $body, $headers);
		
		header('Location: index-ok.php');
	}
} // FIN CODIGO FORM SIDEBAR

// Function to validate against any email injection attempts
function IsInjected($str)
{
  $injections = array('(\n+)',
              '(\r+)',
              '(\t+)',
              '(%0A+)',
              '(%0D+)',
              '(%08+)',
              '(%09+)'
              );
  $inject = join('|', $injections);
  $inject = "/$inject/i";
  if(preg_match($inject,$str))
    {
    return true;
  }
  else
    {
    return false;
  }
}
?>
Les agradeceré cualquier ayuda que puedan darme al respecto, muchas gracias!

Última edición por Txalito; 26/07/2011 a las 08:09 Razón: Creo que deberian mover esta consulta a formularios, no habia visto la opcion. Gracias
  #2 (permalink)  
Antiguo 26/07/2011, 08:43
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: Caracteres latinos no se escriben correctamente en formularios

Cita:
Iniciado por Txalito Ver Mensaje
Por favor mover a formularios, gracias!
no existe el foro de formularios, además tu problema de de codificación, si usas bases de datos se supone que la DB ha de tener la misma codificación que la página, de lo contrario has de recurrir a utf_encode/decode o a las librerias multibyte o iconv
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 26/07/2011, 09:11
 
Fecha de Ingreso: febrero-2010
Mensajes: 11
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Caracteres latinos no se escriben correctamente en formularios

Gracias maycol!

Estuve viendo que el utf8 decode podria ser la solucion, pero debo estar aplicando algo mal en el codigo proque sigue mostarndo caracteres extraños al enviar el correo.

Estoy utilizando el siguiente codigo:

Código PHP:
<?php 
$your_email 
='[email protected]';

session_start();
$errors '';
$name '';
$visit_email '';
$user_message '';
$name_0 '';
$visit_email_0 '';
$user_message_0 '';

// INICIO CODIGO FORM SIDEBAR 
if(isset($_POST['submit_side']))
{
    
$name $_POST['name'];
    
$visit_email $_POST['email'];
    
$tel $_POST['tel'];
    
$host1 $_POST['hostini'];
    
$host2 $_POST['hostava'];
    
$host3 $_POST['hostpre'];
    
$registro $_POST['regi'];
    
$emailing $_POST['mailing'];
    
$otros $_POST['otros'];
    
$user_message $_POST['message'];
    
    
///------------Do Validations-------------
    
if(empty($name)||empty($visit_email))
    {
        
$errors .= "Name and Email are required fields. ";    
    }
    if(
IsInjected($visit_email))
    {
        
$errors .= "Bad email value!";
    }
    if(empty(
$_SESSION['6_letters_code'] ) ||
      
strcasecmp($_SESSION['6_letters_code'], $_POST['6_letters_code']) != 0)
    {
        
$errors .= "El código de verificación no coincide!";
    }
    
    if(empty(
$errors))
    {
        
//send the email
        
$to $your_email;
        
$subject="Consulta rápida > Lightfaro hosting";
        
$from $your_email;
        
$ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
        
        
$body  "$name ha enviado la siguiente consulta desde Lightfarohosting.com\n\n".
        
"Nombre: $name\n".
        
"e-mail: $visit_email\n".
        
"Tel.: $tel\n\n".
        
"SERVICIO/S DE INTERES:\n".
        
"$host1 - $host2 - $host3 - $registro - $emailing - $otros\n\n".
        
"Conmentarios:\n".
        
"$user_message\n\n".
        
"IP: $ip\n";    
        
        
$headers "From: $visit_email \r";
        
        
$name=utf8_decode($name); 
        
$user_message=utf8_decode($user_message); 
                    
        
mail($to$subject$body$headers);
        
        
header('Location: index-ok.php');
    }
// FIN CODIGO FORM SIDEBAR

// Function to validate against any email injection attempts
function IsInjected($str)
{
  
$injections = array('(\n+)',
              
'(\r+)',
              
'(\t+)',
              
'(%0A+)',
              
'(%0D+)',
              
'(%08+)',
              
'(%09+)'
              
);
  
$inject join('|'$injections);
  
$inject "/$inject/i";
  if(
preg_match($inject,$str))
    {
    return 
true;
  }
  else
    {
    return 
false;
  }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Gracias!
  #4 (permalink)  
Antiguo 26/07/2011, 09:17
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: Caracteres latinos no se escriben correctamente en formularios

ahhh! pero es que no había visto que lo que pretendías era enviar un correo, bueno, también debes de especificar en los headers del correo a que codificación te refieres.

Código PHP:
// To send HTML mail, the Content-type header must be set
//$headers  = 'MIME-Version: 1.0' . "\r\n";
//$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'Content-type: text/plain; charset=utf-8' "\r\n"//PLANO 
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 26/07/2011, 09:35
 
Fecha de Ingreso: febrero-2010
Mensajes: 11
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Caracteres latinos no se escriben correctamente en formularios

Sigue escribiendo mal los caracteres al enviar el mail, no sé si estoy escribiendo bien el codigo o si el form deberia tener el accept-charset="UTF-8".

El codigo que genera el mail está asi:

Código PHP:
<?php 
$your_email 
='[email protected]';

session_start();
$errors '';
$name '';
$visit_email '';
$user_message '';
$name_0 '';
$visit_email_0 '';
$user_message_0 '';


// INICIO CODIGO FORM SIDEBAR 
if(isset($_POST['submit_side']))
{
    
$name $_POST['name'];
    
$visit_email $_POST['email'];
    
$tel $_POST['tel'];
    
$host1 $_POST['hostini'];
    
$host2 $_POST['hostava'];
    
$host3 $_POST['hostpre'];
    
$registro $_POST['regi'];
    
$emailing $_POST['mailing'];
    
$otros $_POST['otros'];
    
$user_message $_POST['message'];
    
    
///------------Do Validations-------------
    
if(empty($name)||empty($visit_email))
    {
        
$errors .= "Name and Email are required fields. ";    
    }
    if(
IsInjected($visit_email))
    {
        
$errors .= "Bad email value!";
    }
    if(empty(
$_SESSION['6_letters_code'] ) ||
      
strcasecmp($_SESSION['6_letters_code'], $_POST['6_letters_code']) != 0)
    {
        
$errors .= "El código de verificación no coincide!";
    }
    
    if(empty(
$errors))
    {
        
//send the email
        
$to $your_email;
        
$subject="Consulta rápida > Lightfaro hosting";
        
$from $your_email;
        
$ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
        
        
$body  "$name ha enviado la siguiente consulta desde Lightfarohosting.com\n\n".
        
"Nombre: $name\n".
        
"e-mail: $visit_email\n".
        
"Tel.: $tel\n\n".
        
"SERVICIO/S DE INTERES:\n".
        
"$host1 - $host2 - $host3 - $registro - $emailing - $otros\n\n".
        
"Comentarios:\n".
        
"$user_message\n\n".
        
"IP: $ip\n";    
        
        
$headers "From: $visit_email \r";
        
        
// To send HTML mail, the Content-type header must be set
        //$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
        
$headers .= 'Content-type: text/plain; charset=utf-8' "\r\n"//PLANO 
        
        
$name=utf8_decode($name); 
        
$user_message=utf8_decode($user_message); 
                    
        
mail($to$subject$body$headers);
        
        
header('Location: index-ok.php');
        
    }
// FIN CODIGO FORM SIDEBAR

// Function to validate against any email injection attempts
function IsInjected($str)
{
  
$injections = array('(\n+)',
              
'(\r+)',
              
'(\t+)',
              
'(%0A+)',
              
'(%0D+)',
              
'(%08+)',
              
'(%09+)'
              
);
  
$inject join('|'$injections);
  
$inject "/$inject/i";
  if(
preg_match($inject,$str))
    {
    return 
true;
  }
  else
    {
    return 
false;
  }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  #6 (permalink)  
Antiguo 26/07/2011, 09:37
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: Caracteres latinos no se escriben correctamente en formularios

para que repites innecesariamente el código??, además si ya especificas UTF8, ¿para que usar utf8_decode?
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #7 (permalink)  
Antiguo 26/07/2011, 10:01
 
Fecha de Ingreso: febrero-2010
Mensajes: 11
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Caracteres latinos no se escriben correctamente en formularios

Perdon, pensé que el codigo te servia para revisar como estaba. Lamentablemente sigo con el inconveniente. Agradezco tu ayuda de todos modos, un abrazo!

Etiquetas: caracteres, correctamente, latinos, registro, formulario, usuarios
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 14:10.