function _buildRFC2047Param($name, $value, $charset,
        $encoding='quoted-printable', $maxLength=76
    ) {
        // WARNING: RFC 2047 says: "An 'encoded-word' MUST NOT be used in
        // parameter of a MIME Content-Type or Content-Disposition field",
        // but... it's supported by many clients/servers
        $quoted = '';

        if ($encoding == 'base64') {
            $value = base64_encode($value);
            $prefix = '=?' . $charset . '?B?';
            $suffix = '?=';

            // 2 x SPACE, 2 x '"', '=', ';'
            $add_len = strlen($prefix . $suffix) + strlen($name) + 6;
            $len = $add_len + strlen($value);

            while ($len > $maxLength) { 
                // We can cut base64-encoded string every 4 characters
                $real_len = floor(($maxLength - $add_len) / 4) * 4;
                $_quote = substr($value, 0, $real_len);
                $value = substr($value, $real_len);

                $quoted .= $prefix . $_quote . $suffix . $this->_eol . ' ';
                $add_len = strlen($prefix . $suffix) + 4; // 2 x SPACE, '"', ';'
                $len = strlen($value) + $add_len;
            }
            $quoted .= $prefix . $value . $suffix;

        } else {
            // quoted-printable
            $value = $this->encodeQP($value);
            $prefix = '=?' . $charset . '?Q?';
            $suffix = '?=';

            // 2 x SPACE, 2 x '"', '=', ';'
            $add_len = strlen($prefix . $suffix) + strlen($name) + 6;
            $len = $add_len + strlen($value);

            while ($len > $maxLength) {
                $length = $maxLength - $add_len;
                // don't break any encoded letters
                if (preg_match("/^(.{0,$length}[^\=][^\=])/", $value, $matches)) {
                    $_quote = $matches[1];
                }

                $quoted .= $prefix . $_quote . $suffix . $this->_eol . ' ';
                $value = substr($value, strlen($_quote));
                $add_len = strlen($prefix . $suffix) + 4; // 2 x SPACE, '"', ';'
                $len = strlen($value) + $add_len;
            }

            $quoted .= $prefix . $value . $suffix;
        }

        return " {$name}=\"{$quoted}\"";
    }
function _buildRFC2047Param($name, $value, $charset,
        $encoding='quoted-printable', $maxLength=76
    ) {
        // WARNING: RFC 2047 says: "An 'encoded-word' MUST NOT be used in
        // parameter of a MIME Content-Type or Content-Disposition field",
        // but... it's supported by many clients/servers
        $quoted = '';

        if ($encoding == 'base64') {
            $value = base64_encode($value);
            $prefix = '=?' . $charset . '?B?';
            $suffix = '?=';

            // 2 x SPACE, 2 x '"', '=', ';'
            $add_len = strlen($prefix . $suffix) + strlen($name) + 6;
            $len = $add_len + strlen($value);

            while ($len > $maxLength) { 
                // We can cut base64-encoded string every 4 characters
                $real_len = floor(($maxLength - $add_len) / 4) * 4;
                $_quote = substr($value, 0, $real_len);
                $value = substr($value, $real_len);

                $quoted .= $prefix . $_quote . $suffix . $this->_eol . ' ';
                $add_len = strlen($prefix . $suffix) + 4; // 2 x SPACE, '"', ';'
                $len = strlen($value) + $add_len;
            }
            $quoted .= $prefix . $value . $suffix;

        } else {
            // quoted-printable
            $value = $this->encodeQP($value);
            $prefix = '=?' . $charset . '?Q?';
            $suffix = '?=';

            // 2 x SPACE, 2 x '"', '=', ';'
            $add_len = strlen($prefix . $suffix) + strlen($name) + 6;
            $len = $add_len + strlen($value);

            while ($len > $maxLength) {
                $length = $maxLength - $add_len;
                // don't break any encoded letters
                if (preg_match("/^(.{0,$length}[^\=][^\=])/", $value, $matches)) {
                    $_quote = $matches[1];
                }

                $quoted .= $prefix . $_quote . $suffix . $this->_eol . ' ';
                $value = substr($value, strlen($_quote));
                $add_len = strlen($prefix . $suffix) + 4; // 2 x SPACE, '"', ';'
                $len = strlen($value) + $add_len;
            }

            $quoted .= $prefix . $value . $suffix;
        }

        return " {$name}=\"{$quoted}\"";
    }
function _buildRFC2047Param ( $ name , $ value , $ charset , $ encoding = 'quoted-printable' , $ maxLength = 76 ) { // WARNING: RFC 2047 says: "An 'encoded-word' MUST NOT be used in // parameter of a MIME Content-Type or Content-Disposition field", // but... it's supported by many clients/servers $ quoted = '' ; if ( $ encoding == 'base64' ) { $ value = base64_encode ( $ value ) ; $ prefix = '=?' . $ charset . '?B?' ; $ suffix = '?=' ; // 2 x SPACE, 2 x '"', '=', ';' $ add_len = strlen ( $ prefix . $ suffix ) + strlen ( $ name ) + 6 ; $ len = $ add_len + strlen ( $ value ) ; while ( $ len > $ maxLength ) { // We can cut base64-encoded string every 4 characters $ real_len = floor ( ( $ maxLength - $ add_len ) / 4 ) * 4 ; $ _quote = substr ( $ value , 0 , $ real_len ) ; $ value = substr ( $ value , $ real_len ) ; $ quoted .= $ prefix . $ _quote . $ suffix . $ this -> _eol . ' ' ; $ add_len = strlen ( $ prefix . $ suffix ) + 4 ; // 2 x SPACE, '"', ';' $ len = strlen ( $ value ) + $ add_len ; } $ quoted .= $ prefix . $ value . $ suffix ; } else { // quoted-printable $ value = $ this -> encodeQP ( $ value ) ; $ prefix = '=?' . $ charset . '?Q?' ; $ suffix = '?=' ; // 2 x SPACE, 2 x '"', '=', ';' $ add_len = strlen ( $ prefix . $ suffix ) + strlen ( $ name ) + 6 ; $ len = $ add_len + strlen ( $ value ) ; while ( $ len > $ maxLength ) { $ length = $ maxLength - $ add_len ; // don't break any encoded letters if ( preg_match ( "/^(.{0,$length}[^\=][^\=])/" , $ value , $ matches ) ) { $ _quote = $ matches [ 1 ] ; } $ quoted .= $ prefix . $ _quote . $ suffix . $ this -> _eol . ' ' ; $ value = substr ( $ value , strlen ( $ _quote ) ) ; $ add_len = strlen ( $ prefix . $ suffix ) + 4 ; // 2 x SPACE, '"', ';' $ len = strlen ( $ value ) + $ add_len ; } $ quoted .= $ prefix . $ value . $ suffix ; } return " {$name}=\"{$quoted}\"" ; }
Encodes header parameter as per RFC2047 if needed

@param string $name      The parameter name
@param string $value     The parameter value
@param string $charset   The parameter charset
@param string $encoding  Encoding type (quoted-printable or base64)
@param int    $maxLength Encoded parameter max length. Default: 76

@return string Parameter line
@access private
Encodes header parameter as per RFC2047 if needed