1

Tengo un formulario de contacto pero no envía si llega haber tildes o ñ, he intendado de varias formas pero no he logrado que el formulario envie si llegan a colocar tildes, simbolos o ñ. No se que puede estar faltando, agregue UTF8 pero nada cada vez que alguien llena el formulario y coloca algún carácter especial el formulario no llega y presenta errores.

<form  action="sendbymail2.php" method="post" accept-charset="ISO-8859-1">
                            <div class="row">
                                <div class="col-md-6 col-sm-12">
                                    <div class="contact-form-textfield pb-4">
                                        <input type="text" placeholder="Nombre" class="form-control" required=""  name="nombre">
                                    </div>
                                </div>
                                <div class="col-md-6 col-sm-12">
                                    <div class="contact-form-textfield pb-4">
                                        <input type="email" name="email" placeholder="Email"  class="form-control" required="">
                                    </div>
                                </div>
                                <div class="col-md-6 col-sm-12">
                                    <div class="contact-form-textfield pb-4">
                                        <input type="tel"  name="phone" placeholder="Celular" class="form-control">
                                    </div>
                                </div>
                                <div class="col-md-6 col-sm-12">
                                    <div class="contact-form-textfield pb-4">
                                        <input type="text" name="direccion" placeholder="Dirección" class="form-control" >
                                    </div>
                                </div>
                                <div class="col-lg-12">
                                    <div class="contact-form-textfield pb-4">
                                        <textarea placeholder="Mensaje - agregar placa si eres conductor" class="form-control message" name="message"></textarea>
                                    </div>
                                </div>
                                <div class="col-lg-12 pt-xs-25px text-center">
                                     <input id="submit" type="submit" class="btn btn-success"  name="submit" value="Enviar mensaje" /> 
                                   
                                </div>
                            </div>
                        </form>

sendbymail2.php

<?php
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$direccion = $_POST['direccion'];
$message= $_POST['message'];
$para = 'correo@micorreo.com';
$titulo = 'Hola- Contactenos ';
$header = 'From: ' . $email;
$headers .= "Content-Type: text/html; charset=\"utf-8\"";
$msjCorreo = "Nombre: $nombre\n E-Mail: $email\n Celular: $phone\n Direccion: $direccion\n Mensaje: $message\n";
  
if ($_POST['submit']) {
if (mail($para, $titulo, $msjCorreo, $header)) {
echo "<script language='javascript'>
window.location.href = 'https://www.mipagina.com';
</script>";
} else {
echo 'Falló el envio';
}
}
?>
Giovanny
  • 98
  • 1
  • 13

1 Answers1

2

Hay que usar la función mb_send_mail, que codifica el mensaje a utf-8, como indica la documentación oficial de php https://www.php.net/manual/es/function.mb-send-mail.php

<?php
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$direccion = $_POST['direccion'];
$message= $_POST['message'];
$para = 'correo@micorreo.com';
$titulo = 'Hola- Contáctenos ';
$header = 'From: ' . $email . "\n";
$headers .= "Content-Type: text/plain;charset=\"utf-8\" \n";
$msjCorreo = "Nombre: $nombre\n E-Mail: $email\n Celular: $phone\n Direccion: $direccion\n Mensaje: $message\n";
  
mb_language("uni"); //establecer el lenguaje de codificación a codificación universal utf-8

if ($_POST['submit']) {
    if (mb_send_mail($para, $titulo, $msjCorreo, $header)) {
        echo "<script language='javascript'>
        window.location.href = 'https://www.mipagina.com';
        </script>";
    } 
    else {
        echo 'Falló el envio';
    }
}
?>

También en tu formulario cambia el accept-charset porque lo tienes a inglés, o omítelo.

Pepe N O
  • 532
  • 1
  • 7