【问题标题】:Character set in PHP, mySQL and emailsPHP、mySQL 和电子邮件中的字符集
【发布时间】:2013-11-05 18:31:10
【问题描述】:

角色设定让我走弯路!

我的数据库是 utf8_general_ci,其中的表是 utf8_unicode_ci。 我所有的 PHP 页面都有

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

在头脑中。

当我在 PHP 页面中键入欧元符号 (€) 并将其输入到数据库时,它在 phpMyAdmin 中显示为 € 当我使用 PHP 页面从数据库中复制它时,它会重新显示为 €

到目前为止一切都很好,但是当我使用 PHP 编写 html 电子邮件时,无论我做什么,它都会在电子邮件中显示为 € 我尝试在 html 电子邮件中指定字符集,但它不起作用。可能是因为电子邮件客户端从邮件服务器而不是标题中获取其字符集。 我也遇到了重音字母等问题,但它们被写入文本中,所以我可以通过使用 é 来克服它们,等等。混乱,但并非不可能。

肯定有更好的方法!

我的解决方案(排序)

感谢所有做出贡献的人。我已经尝试了所有方法来将字符集指定为 utf-8(在邮件标头中、html 标头中以及两者中),但消息仍然以 iso 形式到达。所以看来我从别处得到的信息是对的:字符集是由服务器定义的。

每次我想在固定文本中输入 é 时,我都不得不满足于输入诸如 é 之类的内容,这很麻烦,但至少它有效。

对于欧元符号,我已将变量包装在 htmlentities 函数中。它有效,但如果我在类似文件中遇到类似问题,我将不得不记住使用从数据库中获取的任何其他变量。将函数包装在整个 html 主体周围会更容易,但这不起作用,大概是因为它用 .

【问题讨论】:

  • 如何在 php 中发送电子邮件?通常你可以在正文中设置邮件的字符集

标签: php mysql email character-encoding


【解决方案1】:

在您的文本编辑器中检查编码。如果这是错误的,可能会发生疯狂的事情!

对于 MySQL,请参阅 mysql_set_charset

电子邮件实际上是从Content-Type 标头获取其字符集,而不是从电子邮件服务器。确保将此标头设置为适当的值,例如Content-Type: text/html; charset="UTF-8"。另见this question

请记住,对于 HTML,您可以使用 $encoded = htmlentities( $string, ENT_QUOTES, 'utf-8' ) 以便 all characters which have HTML character entity equivalents are translated into these entities

【讨论】:

    【解决方案2】:

    我猜你的正确答案只是为电子邮件设置 utf-8 字符集:

    $headers = "MIME-Version: 1.0\r\n";
    $headers.= "From: =?utf-8?b?".base64_encode($from_name)."?= <".$from_a.">\r\n";
    $headers.= "Content-Type: text/plain;charset=utf-8\r\n";
    $headers.= "Reply-To: $reply\r\n";  
    $headers.= "X-Mailer: PHP/" . phpversion();
    mail($to, $s, $body, $headers);
    

    【讨论】:

      【解决方案3】:

      如果您在客户端中打开电子邮件源(在 Thunderbird 中按 ctrl+u)。您将看到一个 Content-Type 标头。这应该是这样的:

      Content-Type: text/html; charset=utf-8
      

      如果您的电子邮件包含多个部分,您需要将该标题添加到 html 部分。

      标头值需要单独编码(每一行)。

      Subject: =?utf-8?B?...?=
      

      对于 html 内容,您可以只使用 htmlentities() 但这不适用于标题或文本电子邮件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-04
        • 2012-02-22
        • 2016-02-26
        • 1970-01-01
        • 2018-01-23
        • 2013-09-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多