【问题标题】:Email form is messing up UTF-8 text [duplicate]电子邮件表单弄乱了 UTF-8 文本 [重复]
【发布时间】: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"
    );

【问题讨论】:

    标签: php html forms email


    【解决方案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”,因为我需要以某种方式格式化文本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    相关资源
    最近更新 更多