You are here

public function PHPMailer::EncodeQPphp in SMTP Authentication Support 7

Same name and namespace in other branches
  1. 7.2 smtp.phpmailer.inc \PHPMailer::EncodeQPphp()

Encode string to quoted-printable. Only uses standard PHP, slow, but will always work @access public

Parameters

string $string the text to encode:

integer $line_max Number of chars allowed on a line before wrapping:

Return value

string

1 call to PHPMailer::EncodeQPphp()
PHPMailer::EncodeQP in ./smtp.phpmailer.inc
Encode string to RFC2045 (6.7) quoted-printable format Uses a PHP5 stream filter to do the encoding about 64x faster than the old version Also results in same content as you started with after decoding @access public

File

./smtp.phpmailer.inc, line 1643
The mail handler class in smtp module, based on code of the phpmailer library, customized and relicensed to GPLv2.

Class

PHPMailer
PHPMailer - PHP email transport class NOTE: Requires PHP version 5 or later @package PHPMailer @author Andy Prevost @author Marcus Bointon @copyright 2004 - 2009 Andy Prevost

Code

public function EncodeQPphp($input = '', $line_max = 76, $space_conv = FALSE) {
  $hex = array(
    '0',
    '1',
    '2',
    '3',
    '4',
    '5',
    '6',
    '7',
    '8',
    '9',
    'A',
    'B',
    'C',
    'D',
    'E',
    'F',
  );
  $lines = preg_split('/(?:\\r\\n|\\r|\\n)/', $input);
  $eol = "\r\n";
  $escape = '=';
  $output = '';
  foreach ($lines as $line) {
    $linlen = strlen($line);
    $newline = '';
    for ($i = 0; $i < $linlen; $i++) {
      $c = substr($line, $i, 1);
      $dec = ord($c);
      if ($i == 0 && $dec == 46) {

        // convert first point in the line into =2E
        $c = '=2E';
      }
      if ($dec == 32) {
        if ($i == $linlen - 1) {

          // convert space at eol only
          $c = '=20';
        }
        elseif ($space_conv) {
          $c = '=20';
        }
      }
      elseif ($dec == 61 || $dec < 32 || $dec > 126) {

        // always encode "\t", which is *not* required
        $h2 = floor($dec / 16);
        $h1 = floor($dec % 16);
        $c = $escape . $hex[$h2] . $hex[$h1];
      }
      if (strlen($newline) + strlen($c) >= $line_max) {

        // CRLF is not counted
        $output .= $newline . $escape . $eol;

        //  soft line break; " =\r\n" is okay
        $newline = '';

        // check if newline first character will be point or not
        if ($dec == 46) {
          $c = '=2E';
        }
      }
      $newline .= $c;
    }

    // end of for
    $output .= $newline . $eol;
  }

  // end of foreach
  return $output;
}