6

我正在处理一个 LAMP 网络服务器。我有用户用来提交存储在 mysql 的文本字段中的文本的表单。通常这些文本是从 Microsoft Office 产品中复制和粘贴的,所以我得到了很多智能引号和破折号。如果我从数据库中检索它们并将它们显示在网页上,这些字符会正确显示,但我遇到麻烦的是使用 phpmailer 类在电子邮件中发送文本。我得到的东西看起来像这样: - (它应该是一个破折号)。

可能很重要的一件事:如果我在 mysql 中打开一个控制台并选择一个包含 emdash 或智能引号的字段,它将错误地显示在我的控制台上: - 但是,如上所述,如果我的 php页面(使用 PDO)选择字段并显示它,它将在浏览器中正确显示(在本例中为 emdash)。

我不确定是否有办法在 phpmailer 中选择字符集(可能是某个地方的简单设置?)或者是否有更好的方法来解决这个问题。不过,我想我应该清楚,“搜索并用常规等效项替换智能引号和破折号”不是我正在寻找的答案(希望这不是唯一的解决方案)。

我找到了这个信息:
我的 php 网页:utf-8
mysql 客户端编码:latin1
mysql 服务器编码:latin1
phpmailer 字符集:iso-8859-1

4

2 回答 2

6

字符集可以在phpmailer中切换,代码如下:

$myMail->CharSet  = "UTF-8";

This solved my issue. Typographic quotes and double dashes show up in my emails from phpmailer as expected now. This may have been a sorta noobish question (blush). Thanks, Col. Shrapnel for prompting me to look into what encoding all the pieces of the puzzle were using. I'd vote you up but don't have the reputation.

For anyone interested in homework, this link really helped me understand the basics of encoding:
http://www.joelonsoftware.com/articles/Unicode.html

于 2010-12-21T21:41:26.563 回答
0

PEAR Mail_MIME 包允许您通过http://pear.php.net/manual/en/package.mail.mail-mime.get.php执行此操作 我很确定我以前使用过此功能,但不是肯定的。

如果有多个数据源,您可能还需要通过iconv运行以将字符集规范化为单个字符集。

于 2010-12-21T18:55:29.527 回答