note 60283 added to function.mb-encode-mimeheader
| From: | paravoid at osu1 dot php dot net | Date: | Mon, 02 Jan 2006 01:58:23 +0000 |
| Subject: | note 60283 added to function.mb-encode-mimeheader | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-101094@lists.php.net to get a copy of this message | ||
If mb_ version doesn't work for you in MIME-B mode:
function encode_mimeheader($string, $charset=null, $linefeed="\r\n") {
if (!$charset)
$charset = mb_internal_encoding();
$start = "=?$charset?B?";
$end = "?=";
$encoded = '';
/* Each line must have length <= 75, including $start and $end */
$length = 75 - strlen($start) - strlen($end);
/* Average multi-byte ratio */
$ratio = mb_strlen($string, $charset) / strlen($string);
/* Base64 has a 4:3 ratio */
$magic = $avglength = floor(3 * $length * $ratio / 4);
for ($i=0; $i <= mb_strlen($string, $charset); $i+=$magic) {
$magic = $avglength;
$offset = 0;
/* Recalculate magic for each line to be 100% sure */
do {
$magic -= $offset;
$chunk = mb_substr($string, $i, $magic, $charset);
$chunk = base64_encode($chunk);
$offset++;
} while (strlen($chunk) > $length);
if ($chunk)
$encoded .= ' '.$start.$chunk.$end.$linefeed;
}
/* Chomp the first space and the last linefeed */
$encoded = substr($encoded, 1, -strlen($linefeed));
return $encoded;
}
----
Manual Page -- http://www.php.net/manual/en/function.mb-encode-mimeheader.php
Edit -- http://master.php.net/manage/user-notes.php?action=edit+60283
Delete: added to the manual -- http://master.php.net/manage/user-notes.php?action=delete+60283&report=yes&reason=added+to+the+manual
Delete: bad code -- http://master.php.net/manage/user-notes.php?action=delete+60283&report=yes&reason=bad+code
Delete: spam -- http://master.php.net/manage/user-notes.php?action=delete+60283&report=yes&reason=spam
Delete: useless -- http://master.php.net/manage/user-notes.php?action=delete+60283&report=yes&reason=useless
Delete: non-english -- http://master.php.net/manage/user-notes.php?action=delete+60283&report=yes&reason=non-english
Delete: already in docs -- http://master.php.net/manage/user-notes.php?action=delete+60283&report=yes&reason=already+in+docs
Delete: other reasons -- http://master.php.net/manage/user-notes.php?action=delete+60283&report=yes
Reject -- http://master.php.net/manage/user-notes.php?action=reject+60283&report=yes
Search -- http://master.php.net/manage/user-notes.php