关于phpMailer乱码问题

在使用phpMailer发送邮件时,遇到标题显示为特殊格式的乱码问题。通过研究源码,发现乱码与base64编码的中文和特殊字符有关。问题定位在邮件标题编码的特定位置。要解决此问题,可以调整源码或在设置标题时进行处理。
摘要由CSDN通过智能技术生成

  最近在利用phpmailer这个很火的第三方函数包开发php邮件发送功能时候,遇到一个很蹊跷的乱码问题,即发出去的邮件有时候邮件标题会变成一堆很特别的乱码,乱码的具体内容根据邮件标题是会发生变化的,不过共同的特点是都是有=?utf-8?B?这样的格式,在网上查阅了很多资料,包括stackoverflow,有不少人也都遇到过这个问题,但是回答的都比较模糊,初步的结论是邮件标题在进行base64编码时可能由于中文、特殊字符等原因产生了乱码,但单纯这么说毕竟不能令人信服,只能选择自己动手,查看phpmailer的源码来查找这个问题

  经过反复var_dump和exit进行断点,最终目标确定在了这样一段代码上

public function EncodeHeader($str, $position = 'text') {
    $x = 0;
    switch (strtolower($position)) {
      case 'phrase':
        if (!preg_match('/[\200-\377]/', $str)) {
          // Can't use addslashes as we don't know what value has magic_quotes_sybase
          $encoded = addcslashes($str, "\0..\37\177\\\"");
          if (($str == $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) {
            return ($encoded);
          } else {
            return ("\"$encoded\"");
          }
        }
        $x = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches);
        break;
      case 'comment':
        $x = preg_match_all('/[()"]/', $str, $matches);
        // Fall-through
      case 'text':
      default:
        $x += preg_match_all('/[\0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值