public function encodeHeader($str, $position = 'text')
    {
        $matchcount = 0;
        switch (strtolower($position)) {
            case 'phrase':
                if (!preg_match('/[\200-\377]/', $str)) {
                    // Can't use addslashes as we don't know the value of magic_quotes_sybase
                    $encoded = addcslashes($str, "\0..\37\177\\\"");
                    if (($str == $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) {
                        return ($encoded);
                    } else {
                        return ("\"$encoded\"");
                    }
                }
                $matchcount = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches);
                break;
            /** @noinspection PhpMissingBreakStatementInspection */
            case 'comment':
                $matchcount = preg_match_all('/[()"]/', $str, $matches);
            // Intentional fall-through
            case 'text':
            default:
                $matchcount += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches);
                break;
        }

        if ($matchcount == 0) { // There are no chars that need encoding
            return ($str);
        }

        $maxlen = 75 - 7 - strlen($this->CharSet);
        // Try to select the encoding which should produce the shortest output
        if ($matchcount > strlen($str) / 3) {
            // More than a third of the content will need encoding, so B encoding will be most efficient
            $encoding = 'B';
            if (function_exists('mb_strlen') && $this->hasMultiBytes($str)) {
                // Use a custom function which correctly encodes and wraps long
                // multibyte strings without breaking lines within a character
                $encoded = $this->base64EncodeWrapMB($str, "\n");
            } else {
                $encoded = base64_encode($str);
                $maxlen -= $maxlen % 4;
                $encoded = trim(chunk_split($encoded, $maxlen, "\n"));
            }
        } else {
            $encoding = 'Q';
            $encoded = $this->encodeQ($str, $position);
            $encoded = $this->wrapText($encoded, $maxlen, true);
            $encoded = str_replace('=' . self::CRLF, "\n", trim($encoded));
        }

        $encoded = preg_replace('/^(.*)$/m', ' =?' . $this->CharSet . "?$encoding?\\1?=", $encoded);
        $encoded = trim(str_replace("\n", $this->LE, $encoded));

        return $encoded;
    }
public function encodeHeader($str, $position = 'text')
    {
        $matchcount = 0;
        switch (strtolower($position)) {
            case 'phrase':
                if (!preg_match('/[\200-\377]/', $str)) {
                    // Can't use addslashes as we don't know the value of magic_quotes_sybase
                    $encoded = addcslashes($str, "\0..\37\177\\\"");
                    if (($str == $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) {
                        return ($encoded);
                    } else {
                        return ("\"$encoded\"");
                    }
                }
                $matchcount = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches);
                break;
            /** @noinspection PhpMissingBreakStatementInspection */
            case 'comment':
                $matchcount = preg_match_all('/[()"]/', $str, $matches);
            // Intentional fall-through
            case 'text':
            default:
                $matchcount += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches);
                break;
        }

        if ($matchcount == 0) { // There are no chars that need encoding
            return ($str);
        }

        $maxlen = 75 - 7 - strlen($this->CharSet);
        // Try to select the encoding which should produce the shortest output
        if ($matchcount > strlen($str) / 3) {
            // More than a third of the content will need encoding, so B encoding will be most efficient
            $encoding = 'B';
            if (function_exists('mb_strlen') && $this->hasMultiBytes($str)) {
                // Use a custom function which correctly encodes and wraps long
                // multibyte strings without breaking lines within a character
                $encoded = $this->base64EncodeWrapMB($str, "\n");
            } else {
                $encoded = base64_encode($str);
                $maxlen -= $maxlen % 4;
                $encoded = trim(chunk_split($encoded, $maxlen, "\n"));
            }
        } else {
            $encoding = 'Q';
            $encoded = $this->encodeQ($str, $position);
            $encoded = $this->wrapText($encoded, $maxlen, true);
            $encoded = str_replace('=' . self::CRLF, "\n", trim($encoded));
        }

        $encoded = preg_replace('/^(.*)$/m', ' =?' . $this->CharSet . "?$encoding?\\1?=", $encoded);
        $encoded = trim(str_replace("\n", $this->LE, $encoded));

        return $encoded;
    }
public function encodeHeader ( $ str , $ position = 'text' ) { $ matchcount = 0 ; switch ( strtolower ( $ position ) ) { case 'phrase' : if ( ! preg_match ( '/[\200-\377]/' , $ str ) ) { // Can't use addslashes as we don't know the value of magic_quotes_sybase $ encoded = addcslashes ( $ str , "\0..\37\177\\\"" ) ; if ( ( $ str == $ encoded ) && ! preg_match ( '/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/' , $ str ) ) { return ( $ encoded ) ; } else { return ( "\"$encoded\"" ) ; } } $ matchcount = preg_match_all ( '/[^\040\041\043-\133\135-\176]/' , $ str , $ matches ) ; break ; /** @noinspection PhpMissingBreakStatementInspection */ case 'comment' : $ matchcount = preg_match_all ( '/[()"]/' , $ str , $ matches ) ; // Intentional fall-through case 'text' : default : $ matchcount += preg_match_all ( '/[\000-\010\013\014\016-\037\177-\377]/' , $ str , $ matches ) ; break ; } if ( $ matchcount == 0 ) { // There are no chars that need encoding return ( $ str ) ; } $ maxlen = 75 - 7 - strlen ( $ this -> CharSet ) ; // Try to select the encoding which should produce the shortest output if ( $ matchcount > strlen ( $ str ) / 3 ) { // More than a third of the content will need encoding, so B encoding will be most efficient $ encoding = 'B' ; if ( function_exists ( 'mb_strlen' ) && $ this -> hasMultiBytes ( $ str ) ) { // Use a custom function which correctly encodes and wraps long // multibyte strings without breaking lines within a character $ encoded = $ this -> base64EncodeWrapMB ( $ str , "\n" ) ; } else { $ encoded = base64_encode ( $ str ) ; $ maxlen -= $ maxlen % 4 ; $ encoded = trim ( chunk_split ( $ encoded , $ maxlen , "\n" ) ) ; } } else { $ encoding = 'Q' ; $ encoded = $ this -> encodeQ ( $ str , $ position ) ; $ encoded = $ this -> wrapText ( $ encoded , $ maxlen , true ) ; $ encoded = str_replace ( '=' . self :: CRLF , "\n" , trim ( $ encoded ) ) ; } $ encoded = preg_replace ( '/^(.*)$/m' , ' =?' . $ this -> CharSet . "?$encoding?\\1?=" , $ encoded ) ; $ encoded = trim ( str_replace ( "\n" , $ this -> LE , $ encoded ) ) ; return $ encoded ; }
Encode a header string optimally.
Picks shortest of Q, B, quoted-printable or none.
@access public
@param string $str
@param string $position
@return string
Encode a header string optimally . Picks shortest of Q B quoted - printable or none .