[dev] fold long headers

Wenzhuo Zhang wenzhuo@zhmail.com
Sun, 7 Jul 2002 23:59:53 +0800


Hi,

According to rfc #2047, 

   While there is no limit to the length of a multiple-line header
   field, each line of a header field that contains one or more
   'encoded-word's is limited to 76 characters.

So I guess the first recursive invocation of MIME::encode() in MIME.php
should be called with $outer=false.

--- horde/lib/MIME.php.dist	Sun Apr  7 00:19:19 2002
+++ horde/lib/MIME.php	Sun Jul  7 23:22:41 2002
@@ -66,7 +66,7 @@
     {
         if (MIME::is8bit($text)) {
             if (((strlen($text) * 3) + strlen($charset) + 7) > 76) {
-                $text = MIME::encode(substr($text, 0, (23 - strlen($charset))), $charset) . MIME::encode(substr($text, (23 - strlen($charset))), $charset, false);
+                $text = MIME::encode(substr($text, 0, (23 - strlen($charset))), $charset, false) . MIME::encode(substr($text, (23 - strlen($charset))), $charset, false);
             } else {
                 $text = "=?$charset?B?" . strtr(trim(base64_encode($text)), ' ', '_') . "?=\n\t";
             }

Another problem with MIME:encode() is that header fields are split
into segments of 23 characters, which would cause a multi-byte
character to be split across 'encoded words'. Well, it's not a simple
fix 'cause it involves so many character sets which have multi-byte
characters. iconv is the way to go, IMHO.

-- 
Wenzhuo
  GnuPG Key ID 0xBA586A68
  Key fingerprint = 89C7 C6DE D956 F978 3F12  A8AF 5847 F840 BA58 6A68