朋友的WordPress发中文邮件总是乱码,喊我帮忙看看。很奇怪,后台、文章里的中文都能正常显示,看起来一切正常;我在我电脑上搭了一套,同样的代码,发邮件也没问题。
后来打开phpmailer的debug模式,发现什么都对,就是中文内容都是问号。
继续往上找到发邮件的函数,运气不错插件留了filter
,遂修改模板,add_filter
强制转换内容。
转换前先检查,不是UTF-8再转:
if (!mb_detect_encoding($content)) {
$content = iconv('ASCII', 'UTF-8', $content);
}
return $content;
结果代码传上去报错,说没有mb_detect_encoding
,然后想起来yum安装php时确实默认不包含很多扩展,于是手动安装yum install php55w-mbstring。然后重启apache,发邮件测试,正常了。
我又想是不是缺少多字节文本模块(Multibyte String)导致原先无法发送中文呢?去掉filter
,仍然正常,确实如此。
总结
yum安装新版php需要增加源,而新版的源默认不包含很多常用的库,使用的时候最好都装上。WordPress的翻译机制面对多字节文本时,编码不对不会报错,也需要小心。
欢迎吐槽,共同进步