downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

quotemeta> <quoted_printable_decode
Last updated: Fri, 27 Nov 2009

view this page in

quoted_printable_encode

(PHP 5 >= 5.3.0)

quoted_printable_encodeConvert a 8 bit string to a quoted-printable string

Description

string quoted_printable_encode ( string $str )

Returns a quoted printable string created according to » RFC2045, section 6.7.

This function is similar to imap_8bit(), except this one does not require the IMAP module to work.

Parameters

str

The input string.

Return Values

Returns the encoded string.

See Also



add a note add a note User Contributed Notes
quoted_printable_encode
tzangerl (at) pdc {dot} kth [dot] se
17-Nov-2009 02:16
A function that QP-encodes an input string (written for PHP < 5.3) and
wordwraps it at the same time, in order to avoid classification according
to the MIME QP LONG LINE rule of SpamAssassin:

<?php
function quoted_printable_encode($input, $line_max = 75) {
  
$hex = array('0','1','2','3','4','5','6','7',
                         
'8','9','A','B','C','D','E','F');
  
$lines = preg_split("/(?:\r\n|\r|\n)/", $input);
  
$linebreak = "=0D=0A=\r\n";
  
/* the linebreak also counts as characters in the mime_qp_long_line
    * rule of spam-assassin */
  
$line_max = $line_max - strlen($linebreak);
  
$escape = "=";
  
$output = "";
  
$cur_conv_line = "";
  
$length = 0;
  
$whitespace_pos = 0;
  
$addtl_chars = 0;

   for (
$j=0; $j<count($lines); $j++) {
    
$line = $lines[$j];
    
$linlen = strlen($line);

     for (
$i = 0; $i < $linlen; $i++) {
      
$c = substr($line, $i, 1);
      
$dec = ord($c);

      
$length++;

       if (
$dec == 32) {
      
// space occurring at end of line, need to encode
     
if (($i == ($linlen - 1))) {
        
$c = "=20";
        
$length += 2;
      }

     
$addtl_chars = 0;
     
$whitespace_pos = $i;
    } elseif ( (
$dec == 61) || ($dec < 32 ) || ($dec > 126) ) {
     
$h2 = floor($dec/16); $h1 = floor($dec%16);
     
$c = $escape . $hex["$h2"] . $hex["$h1"];
     
$length += 2;
     
$addtl_chars += 2;
    }

   
// length for wordwrap exceeded, get a newline into the text
   
if ($length >= $line_max) {
     
$cur_conv_line .= $c;

     
// read only up to the whitespace for the current line
     
$whitesp_diff = $i - $whitespace_pos + $addtl_chars;
     
$output .= substr($cur_conv_line, 0,
                            (
strlen($cur_conv_line) - $whitesp_diff)) .
                           
$linebreak;

     
/* the text after the whitespace will have to be read
          * again ( + any additional characters that came into
          * existence as a result of the encoding process after the whitespace) */
     
$i $i - $whitesp_diff + $addtl_chars;

     
$cur_conv_line = "";
     
$length = 0;
     
$whitespace_pos = 0;
    } else {
     
// length for wordwrap not reached, continue reading
     
$cur_conv_line .= $c;
    }
     }
// end of for

    
$length = 0;
    
$whitespace_pos = 0;
    
$output .= $cur_conv_line;
    
$cur_conv_line = "";

     if (
$j<=count($lines)-1) {
      
$output .= $linebreak;
     }
  }

  return
trim($output);
}
?>

quotemeta> <quoted_printable_decode
Last updated: Fri, 27 Nov 2009
 
 
show source | credits | sitemap | contact | advertising | mirror sites