Exemple #1
0
 /**
  * Encodes a header value as per RFC2047
  *
  * @param string $value      The header data to encode
  * @param string $charset    Character set name
  * @param string $encoding   Encoding name (base64 or quoted-printable)
  * @param int    $prefix_len Prefix length. Default: 0
  * @param string $eol        End-of-line sequence. Default: "\r\n"
  *
  * @return string            Encoded header data
  * @access public
  * @since 1.6.1
  */
 public static function encodeHeaderValue($value, $charset, $encoding, $prefix_len = 0, $eol = "\r\n")
 {
     // #17311: Use multibyte aware method (requires mbstring extension)
     if ($result = Mail_MimePart2::encodeMB($value, $charset, $encoding, $prefix_len, $eol)) {
         return $result;
     }
     // Generate the header using the specified params and dynamicly
     // determine the maximum length of such strings.
     // 75 is the value specified in the RFC.
     $encoding = $encoding == 'base64' ? 'B' : 'Q';
     $prefix = '=?' . $charset . '?' . $encoding . '?';
     $suffix = '?=';
     $maxLength = 75 - strlen($prefix . $suffix);
     $maxLength1stLine = $maxLength - $prefix_len;
     if ($encoding == 'B') {
         // Base64 encode the entire string
         $value = base64_encode($value);
         // We can cut base64 every 4 characters, so the real max
         // we can get must be rounded down.
         $maxLength = $maxLength - $maxLength % 4;
         $maxLength1stLine = $maxLength1stLine - $maxLength1stLine % 4;
         $cutpoint = $maxLength1stLine;
         $output = '';
         while ($value) {
             // Split translated string at every $maxLength
             $part = substr($value, 0, $cutpoint);
             $value = substr($value, $cutpoint);
             $cutpoint = $maxLength;
             // RFC 2047 specifies that any split header should
             // be seperated by a CRLF SPACE.
             if ($output) {
                 $output .= $eol . ' ';
             }
             $output .= $prefix . $part . $suffix;
         }
         $value = $output;
     } else {
         // quoted-printable encoding has been selected
         $value = Mail_MimePart2::encodeQP($value);
         // This regexp will break QP-encoded text at every $maxLength
         // but will not break any encoded letters.
         $reg1st = "|(.{0,{$maxLength1stLine}}[^\\=][^\\=])|";
         $reg2nd = "|(.{0,{$maxLength}}[^\\=][^\\=])|";
         if (strlen($value) > $maxLength1stLine) {
             // Begin with the regexp for the first line.
             $reg = $reg1st;
             $output = '';
             while ($value) {
                 // Split translated string at every $maxLength
                 // But make sure not to break any translated chars.
                 $found = preg_match($reg, $value, $matches);
                 // After this first line, we need to use a different
                 // regexp for the first line.
                 $reg = $reg2nd;
                 // Save the found part and encapsulate it in the
                 // prefix & suffix. Then remove the part from the
                 // $value_out variable.
                 if ($found) {
                     $part = $matches[0];
                     $len = strlen($matches[0]);
                     $value = substr($value, $len);
                 } else {
                     $part = $value;
                     $value = '';
                 }
                 // RFC 2047 specifies that any split header should
                 // be seperated by a CRLF SPACE
                 if ($output) {
                     $output .= $eol . ' ';
                 }
                 $output .= $prefix . $part . $suffix;
             }
             $value = $output;
         } else {
             $value = $prefix . $value . $suffix;
         }
     }
     return $value;
 }
Exemple #2
0
 /**
  * Encodes a header as per RFC2047
  *
  * @param string $name     The header name
  * @param string $value    The header data to encode
  * @param string $charset  Character set name
  * @param string $encoding Encoding name (base64 or quoted-printable)
  *
  * @return string          Encoded header data (without a name)
  * @access public
  * @since 1.5.3
  * @deprecated Just use Mail_MimePart2::encodeHeader() directly with the right EOL param.
  */
 public function encodeHeader($name, $value, $charset, $encoding)
 {
     return Mail_MimePart2::encodeHeader($name, $value, $charset, $encoding, $this->_build_params['eol']);
 }