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); } } }