山魈 Api ??在主题
Mandrill Api ?? in Subject
我正在使用 Mandrill Transport (https://github.com/khanlou/MandrillTransport-CakePHP) 在我的 cakephp 应用程序中发送邮件。
但是在发送邮件时我收到了??由于特殊字符,在我的主题行中的奇怪位置。
Subject = 'Découvrez vite toutes les nouveautés sur r7site.com'
Result = 'Découvrez vite toutes les nouveautés sur r7?? site.com'
如你所见??摆放的很奇怪。
当我使用默认的 cakephp 邮件时,它就像一个魅力...
public $default = array(
'transport' => 'Mail',
'from' => 'noreply@q8mazout.be',
'charset' => 'utf-8',
'headerCharset' => 'utf-8',
);
我猜这与 utf-8 字符集有关,但我不确定。内容适用于 mandrill,实际上字符在主题中也打印得很好。只是 ??不应该在那里...
您需要将您的内容从 ASCII 转换为 UTF-8,为此您可以使用以下函数,因为某些第三方 API(例如 mandrill)很多时候不支持特殊字符。
mb_convert_encoding($subject, 'UTF-8', 'ASCII');
我终于找到了解决办法。显然,CakePHP 向标题添加了换行符,导致标题中断。虽然它只发生在特殊字符上。
标题调试:
'=?UTF-8?B?RMOpY291dnJleiB2aXRlIHRvdXRlcyBsZXMgbm91dmVhdXTDqXMgc3VyIHE4?=
=?UTF-8?B?bWF6b3V0LmJl?='
MandrillTestTransport 中的解决方案
$subject = str_replace(array(PHP_EOL, "\r"), '', $this->_cakeEmail->subject());
$message = array(
'html' => $this->_cakeEmail->message('html'),
'text' => $this->_cakeEmail->message('text'),
'subject' => $subject,
...
);
我正在使用 Mandrill Transport (https://github.com/khanlou/MandrillTransport-CakePHP) 在我的 cakephp 应用程序中发送邮件。
但是在发送邮件时我收到了??由于特殊字符,在我的主题行中的奇怪位置。
Subject = 'Découvrez vite toutes les nouveautés sur r7site.com'
Result = 'Découvrez vite toutes les nouveautés sur r7?? site.com'
如你所见??摆放的很奇怪。
当我使用默认的 cakephp 邮件时,它就像一个魅力...
public $default = array(
'transport' => 'Mail',
'from' => 'noreply@q8mazout.be',
'charset' => 'utf-8',
'headerCharset' => 'utf-8',
);
我猜这与 utf-8 字符集有关,但我不确定。内容适用于 mandrill,实际上字符在主题中也打印得很好。只是 ??不应该在那里...
您需要将您的内容从 ASCII 转换为 UTF-8,为此您可以使用以下函数,因为某些第三方 API(例如 mandrill)很多时候不支持特殊字符。
mb_convert_encoding($subject, 'UTF-8', 'ASCII');
我终于找到了解决办法。显然,CakePHP 向标题添加了换行符,导致标题中断。虽然它只发生在特殊字符上。
标题调试:
'=?UTF-8?B?RMOpY291dnJleiB2aXRlIHRvdXRlcyBsZXMgbm91dmVhdXTDqXMgc3VyIHE4?= =?UTF-8?B?bWF6b3V0LmJl?='
MandrillTestTransport 中的解决方案
$subject = str_replace(array(PHP_EOL, "\r"), '', $this->_cakeEmail->subject());
$message = array(
'html' => $this->_cakeEmail->message('html'),
'text' => $this->_cakeEmail->message('text'),
'subject' => $subject,
...
);