电子邮件表单弄乱了 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 标头发送到客户端浏览器,但带有变量 $headers
的 mail
函数将标头发送到电子邮件。
【讨论】:
成功了,谢谢!一个区别是我将示例中的“text/html”更改为“text\plain”,因为我需要以某种方式格式化文本。以上是关于电子邮件表单弄乱了 UTF-8 文本 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
UITextField 子类弄乱了adjustFontSizeToWidth