You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP邮件表单无法识别带重音/特殊字符,请求解决乱码问题

解决PHP邮件表单UTF-8字符乱码问题

你遇到的"Envío"显示为"Envío"是UTF-8编码在邮件传输中未正确配置导致的乱码,以下是针对你代码的具体修复方案:

核心问题分析

  1. 定义的$headers变量未在mail函数中传递,导致UTF-8编码设置无效
  2. 邮件主题未做UTF-8编码处理
  3. From头部格式不符合标准
  4. 缺少内容传输编码的声明

修正后的完整代码

<html lang="es">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  <link href="assets/css/style.css" rel="stylesheet">
  <link href="assets/css/custom.css" rel="stylesheet">
</head>
<body>

<div class="col-md-6">
<div class="form contact-form">
        <?php
        error_reporting(0);
        $action=$_REQUEST['action']; 
        if ($action=="")    /* display the contact form */ 
        { 
        ?>
<form class="php-email-form" id="contact-form" action="<?php echo $_SERVER["PHP_SELF"];?>" method="POST" enctype="multipart/form-data" autocomplete="off">
<input type="hidden" name="action" value="submit">
<div class="form-group">
<input class="form-control" type="text" name="name" value="" size="30" placeholder="Nombre" class="form-area" autocomplete="off" /></div>
<div class="form-group mt-3"><input class="form-control" type="text" name="email" value="" size="30" placeholder="e-Mail" class="form-area" autocomplete="off" /></div>
<div class="form-group mt-3"><input class="form-control" type="text" name="phone" value="" size="30" placeholder="Teléfono" class="form-area" autocomplete="off" /></div>
<textarea class="form-control mt-3" name="message" placeholder="Tu mensaje" class="form-area"></textarea>
<div class="my-3"><div class="loading">Enviando...</div></div>
<div class="text-left"><button type="submit">Enviar Mensaje</button></div>
</form>

        <?php 
                }  
        else
        {
        $name=$_REQUEST['name']; 
        $email=$_REQUEST['email'];
        $phone=$_REQUEST ['phone']; 
        $message=$_REQUEST['message'];

        if (($name=="")||($email=="")||($phone=="")||($message=="")) 
        { 
        echo "<div class='error-message'><strong>Tu mensaje no pudo ser enviado</strong><br>Por favor, completá todos los campos.<br>
        <a href=\"javascript:history.back()\" target=\"_self\"><img src='assets/img/back.png' /></a></div>";
        } 

        else{
        // 处理邮件内容,确保换行符符合邮件标准
        $body = "Nuevo mensaje desde la web!\r\n".
                "Nombre: $name\r\n".
                "e-Mail: $email\r\n".
                "Telefono: $phone\r\n".
                "Mensaje:\r\n".
                $message;
        
        // 构建完整的邮件头部信息
        $headers = "From: \"Web Contact\" <web@mydomain.com>\r\n";
        $headers .= "Return-Path: $email\r\n";
        $headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
        $headers .= "Content-Transfer-Encoding: quoted-printable\r\n";
        
        // 对邮件主题进行UTF-8编码,兼容所有邮件客户端
        $subject = mb_encode_mimeheader("Contacto WEB", "UTF-8");

        // 发送邮件,传递完整的头部配置
        mail("web@mydomain.com", $subject, $body, $headers);

        echo "<div class='sent-message'>Tu mensaje ha sido enviado<br />
        y pronto será respondido.<br><br>
        <strong>Gracias por contactarnos!</strong></div>"; 
        }
        }
        ?>
</div>
</div>
</body>
</html>

关键修改说明

  • 统一头部传递:将From、编码配置等合并到$headers变量,确保mail函数能读取到完整的编码规则。
  • 主题编码处理:用mb_encode_mimeheader对主题做UTF-8编码,解决非ASCII字符乱码问题。
  • 内容格式规范:把换行符改为\r\n(符合邮件传输标准),同时明确设置内容类型为纯文本+UTF-8(若需HTML邮件,可改为text/html并确保内容为HTML格式)。
  • 传输编码声明:添加Content-Transfer-Encoding: quoted-printable,保证UTF-8字符能正确解析。
  • 表单细节修正:补充action属性的echo输出,修复反向的autocomplete值为标准的off。

内容的提问来源于stack exchange,提问作者Speedbit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 06:00:11