我正在处理LAMP网络服务器。我有用户用来提交存储在mysql文本字段中的文本的表单。通常,此文本是从Microsoft Office产品中复制和粘贴的,因此我收到了大量智能引号和emdashes。如果我从数据库中检索它们并将它们显示在网页上,这些字符会正确显示,但是我遇到麻烦的是使用phpmailer类在电子邮件中发送文本。我得到的东西看起来像这样:–(它应该是一个emdash)。
可能重要的一件事:如果我在mysql中启动一个控制台并选择一个包含emdash或智能引号的字段,它将在我的控制台上显示错误:–但是,如上所述,如果我的php页面(使用PDO)选择该字段并显示它,它将在浏览器中正确显示(在这种情况下为emdash)。
我不确定是否有办法在phpmailer中选择一个字符集(也许这是一个简单的设置?)或者是否有更好的解决方法。我想我应该清楚,“用他们常规的等价物搜索和替换智能引号和emdashes”并不是我正在寻找的答案(希望这不是唯一的解决方案)。
我发现了这个信息:
我的php网页:utf-8
mysql客户端编码:latin1
mysql服务器编码:latin1
phpmailer字符集:iso-8859-1
答案 0 :(得分:4)
可以使用以下代码在phpmailer中切换字符集:
$myMail->CharSet = "UTF-8";
这解决了我的问题。正如预期的那样,我在phpmailer的电子邮件中显示了排版引号和双短划线。这可能是一个有点愚蠢的问题(脸红)。谢谢,上校Shrapnel提示我查看拼图的所有部分使用的编码。我会投票给你,但没有声誉。
对于任何对家庭作业感兴趣的人,这个链接确实帮助我理解了编码的基础知识:
http://www.joelonsoftware.com/articles/Unicode.html
答案 1 :(得分:0)
PEAR Mail_MIME包允许您通过http://pear.php.net/manual/en/package.mail.mail-mime.get.php执行此操作。我非常确定我以前使用过此功能,但不是肯定的。
如果有多个数据源,您可能还需要通过iconv运行以将字符集规范化为单个字符集。