【问题标题】:CakePHP Email Transport EncodingCakePHP 电子邮件传输编码
【发布时间】:2015-04-25 10:40:54
【问题描述】:

我为 CakeEmail 创建了一个自定义传输(允许我使用 Mandrill 发送电子邮件)。但是,每当我访问消息的内容(这是由蛋糕电子邮件模板驱动的)时,它都不会正确编码字符(它将“é”更改为“é”等)。如果我使用 CakeEmail 并绕过传输,它会在电子邮件中正确显示字符。我已将其缩小到传输代码中的 $email->message('html') 。如果我输出 $email->message('html'),则字符已经不正确。

App::uses('AbstractTransport', 'Network/Email');
App::uses('HttpSocket', 'Network/Http');

class MandrillTransport extends AbstractTransport {
    public function send(CakeEmail $email) {
        debug($email->message('html'));exit;
    }
}

想法?

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    您很可能在某处存在编码不匹配,例如,如果您的 App.encoding 与您的 CakeEmail::$charset 不匹配,CakeEmail 会尝试将内容从 App.encoding 转换为 CakeEmail::$charset

    https://github.com/cakephp/.../2.6.2/lib/Cake/Network/Email/CakeEmail.php#L1338

    例如,如果前者是iso-8859-1,而后者是utf-8,就像内容一样,您最终会得到您在此处显示的结果。

    // outputs é when displayed as utf-8/unicode
    echo mb_convert_encoding('é', 'utf-8', 'iso-8859-1');
    

    你必须做一些进一步的调试来追踪到底哪里出了问题。

    【讨论】:

      猜你喜欢
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      • 2011-05-08
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多