Exemplo n.º 1
0
 function encode_header($str = null, $charset = null, $encoding = null, $len = null, $end = null, $debug = null)
 {
     if (!FUNC4::is_debug($debug)) {
         $debug = debug_backtrace();
     }
     $_mime = new MIME4();
     $err = array();
     if (!is_string($str)) {
         $err[] = 'invalid argument type';
     }
     if ($charset == null) {
         $charset = $_mime->HCHARSET;
     } else {
         if (!is_string($charset)) {
             $err[] = 'invalid charset type';
         } else {
             if (!(strlen($charset) >= 2 && FUNC4::is_alpha($charset, true, '-'))) {
                 $err[] = 'invalid charset value';
             }
         }
     }
     if ($encoding == null) {
         $encoding = $_mime->HENCDEF;
     } else {
         if (!is_string($encoding)) {
             $err[] = 'invalid encoding type';
         } else {
             $encoding = strtolower(FUNC4::str_clear($encoding));
             if (!isset($_mime->hencarr[$encoding])) {
                 $err[] = 'invalid encoding value';
             }
         }
     }
     if ($len == null) {
         $len = $_mime->HLEN;
     } else {
         if (!(is_int($len) && $len > 1)) {
             $err[] = 'invalid line length value';
         }
     }
     if ($end == null) {
         $end = $_mime->LE;
     } else {
         if (!is_string($end)) {
             $err[] = 'invalid line end value';
         }
     }
     if (count($err) > 0) {
         FUNC4::trace($debug, implode(', ', $err));
     } else {
         if ($str == '') {
             return $str;
         } else {
             $enc = false;
             $dif = $len - strlen('=?' . $charset . '?X??=');
             if ($encoding == 'quoted-printable') {
                 if (!MIME4::is_printable($str)) {
                     $new = $dif - 4 > 2 ? $dif - 4 : $len;
                     $enc = MIME4::qp_encode($str, $new, $end);
                     $enc = str_replace(array('?', ' ', '=' . $end), array('=3F', '_', $end), $enc);
                 }
             } else {
                 if ($encoding == 'base64') {
                     $new = $dif > 3 ? $dif : $len;
                     if ($new > 3) {
                         for ($i = $new; $i > 2; $i--) {
                             $crt = '';
                             for ($j = 0; $j <= $i; $j++) {
                                 $crt .= 'x';
                             }
                             if (strlen(base64_encode($crt)) <= $new) {
                                 $new = $i;
                                 break;
                             }
                         }
                     }
                     $cnk = rtrim(chunk_split($str, $new, $end));
                     $imp = array();
                     foreach (explode($end, $cnk) as $line) {
                         if ($line != '') {
                             $imp[] = base64_encode($line);
                         }
                     }
                     $enc = implode($end, $imp);
                 }
             }
             $res = array();
             if ($enc) {
                 $chr = $encoding == 'base64' ? 'B' : 'Q';
                 foreach (explode($end, $enc) as $val) {
                     if ($val != '') {
                         $res[] = '=?' . $charset . '?' . $chr . '?' . $val . '?=';
                     }
                 }
             } else {
                 $cnk = rtrim(chunk_split($str, $len, $end));
                 foreach (explode($end, $cnk) as $val) {
                     if ($val != '') {
                         $res[] = $val;
                     }
                 }
             }
             return implode($end . "\t", $res);
         }
     }
 }