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

网页表单西里尔文邮件正文显示乱码问题求助

解决PHP邮件正文UTF-8乱码问题

问题分析

邮件正文乱码的核心原因是未告知邮件客户端正文采用UTF-8编码,同时原代码存在一处语法错误需要修复。


1. 修复主题行语法错误

原代码中$email_subject行末尾多余的"\n";;会导致PHP语法错误,直接删除该部分:

$email_subject = '=?UTF-8?B?' . base64_encode("Съобщение от сайта: " . $subject) . '?=';

2. 添加邮件编码头信息

在邮件头中明确指定MIME版本、内容类型和编码方式,让邮件客户端正确解析UTF-8字符:

$headers = "From: $email_from \r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
$headers .= "Content-Transfer-Encoding: 8bit\r\n";

完整修改后的代码

<?php

if(!isset($_POST['submit']))
{
    //This page should not be accessed directly. Need to submit the form.
    echo "Грешка; трябва да изпратите формата";
}
$name = $_POST['name'];
$visitor_email = $_POST['email'];
$message = $_POST['message'];
$subject = $_POST['subject'];
$phone = $_POST['phone'];

//Validate first
if(empty($name)||empty($visitor_email)) 
{
        echo "Име и имейл са задължителни.";
        exit;
}

if(IsInjected($visitor_email))
{
        echo "Невалиден имейл.";
        exit;
}

$email_from = 'z3robot@...';//<== update the email address
$email_subject = '=?UTF-8?B?' . base64_encode("Съобщение от сайта: " . $subject) . '?=';
$email_body = "Name: $name. \n". 
              "Phone: $phone. \n". 
              "Subject: $subject. \n". 
              "The message is: $message. \n".
              "Reply to: $visitor_email \n";

$to = "z3robot@...";//<== update the email address
$headers = "From: $email_from \r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
$headers .= "Content-Transfer-Encoding: 8bit\r\n";

if(mail($to, $email_subject, $email_body, $headers)){
    //if successful go to index page in 3 seconds.
    echo "Съобщението е изпратено успешно. Ще бъдете прехвърлени на главната страница след 3 секунди.";
    header("refresh:3; url=index.html");
}else{
    //if not successful go to contacts page in 5 seconds.
    echo "Съобщението НЕ е изпратено успешно. Ще бъдете прехвърлени отново в страница Контакти след 5 секунди.";
    header("refresh:5; url=contact-us.html");
}
//done.


// 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;
}
}

?>

补充说明

如果需要对正文使用Base64编码(与主题处理方式一致),可调整如下:

  1. 对正文进行Base64编码:$email_body = base64_encode($email_body);
  2. 修改编码头:$headers .= "Content-Transfer-Encoding: base64\r\n";
    不过这种方式冗余,直接使用8bit编码配合UTF-8更简单直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:25:37