电子邮件表单弄乱了 UTF-8 文本 [重复]

Posted

技术标签:

【中文标题】电子邮件表单弄乱了 UTF-8 文本 [重复]【英文标题】:Email form is messing up UTF-8 text [duplicate] 【发布时间】:2019-08-01 06:48:30 【问题描述】:

我的网站上有一个 php 表单。它从 html 输入元素中收集文本字符串,然后将文本发送到我的邮箱。但是,当人们用其他语言输入文本时,电子邮件就会出现乱码。文本在 Web 浏览器中似乎没问题。甚至还有一些 javascript 代码可以获取/设置其中的一些表单字段,而且似乎这样做是正确的。

也许 PHP 代码没有将文本视为 unicode?还是使用错误的编码将文本发送到我的邮箱?我会很感激一些帮助,谢谢。

我已经添加了

header("Content-Type: text/html; charset=utf8");

到 PHP 文件的顶部。

这是使用 POST 获取输入值的 PHP 表单的一部分。

$name       = $_POST["name"];
$email      = $_POST["email"];
$message    = $_POST["message"];
$titletxt   = $_POST["titletxt"];
$titleurl   = $_POST["titleurl"];
$legend     = $_POST["legend"];
$command    = $_POST["command"];
$binding    = $_POST["binding"];
$layout     = $_POST["layout"];

这是通过电子邮件向我发送文本的 PHP 表单的一部分:

    mail
    (
        "blahblah@blah.com",
        "VGKD Bindings Submission",
        "NAME:\t\t" . $name     . "\n" .
        "EMAIL:\t\t"    . $email    . "\n" .
        "MESSAGE:\t"    . $message  . "\n" .
        "GAME TITLE:\t" . $titletxt . "\n" .
        "GAME URL:\t"   . $titleurl . "\n" .
        "LAYOUT:\t\t"   . $layout   . "\n\n" .
        "LEGENDS:\n"    . $legend   . "\n\n" .
        "COMMANDS:\n"   . $command  . "\n\n" .
        "BINDINGS:\n"   . $binding  . "\n\n"
    );

【问题讨论】:

【参考方案1】:

请尝试在您的邮件功能中添加 utf-8 字符集标头,例如

$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";

$headers .= 'From: <example@example.com>' . "\r\n";
$headers .= 'Cc: example@example.com' . "\r\n";

 mail
    (
        "blahblah@blah.com",
        "VGKD Bindings Submission",
        "NAME:\t\t" . $name     . "\n" .
        "EMAIL:\t\t"    . $email    . "\n" .
        "MESSAGE:\t"    . $message  . "\n" .
        "GAME TITLE:\t" . $titletxt . "\n" .
        "GAME URL:\t"   . $titleurl . "\n" .
        "LAYOUT:\t\t"   . $layout   . "\n\n" .
        "LEGENDS:\n"    . $legend   . "\n\n" .
        "COMMANDS:\n"   . $command  . "\n\n" .
        "BINDINGS:\n"   . $binding  . "\n\n",
        $headers
    );

header() 函数将原始 HTTP 标头发送到客户端浏览器,但带有变量 $headersmail 函数将标头发送到电子邮件。

【讨论】:

成功了,谢谢!一个区别是我将示例中的“text/html”更改为“text\plain”,因为我需要以某种方式格式化文本。

以上是关于电子邮件表单弄乱了 UTF-8 文本 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 表单验证器弄乱了取消按钮

HashMap弄乱了自己元素的顺序[重复]

TextView 提示弄乱了 RTL 重力

UITextField 子类弄乱了adjustFontSizeToWidth

为啥 QTextBrowser 弄乱了我的 HTML 代码?

电子邮件未格式化为 gmail