| | |
| | | return $posa - $posb; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Add quoted-printable encoding to a given string |
| | | * |
| | | * @param string String to encode |
| | | * @param int Add new line after this number of characters |
| | | * @param boolean True if spaces should be converted into =20 |
| | | * @return string Encoded string |
| | | */ |
| | | function quoted_printable_encode($input, $line_max=76, $space_conv=false) |
| | | { |
| | | $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); |
| | | $eol = "\r\n"; |
| | | $escape = "="; |
| | | $output = ""; |
| | | |
| | | while( list(, $line) = each($lines)) |
| | | { |
| | | //$line = rtrim($line); // remove trailing white space -> no =20\r\n necessary |
| | | $linlen = strlen($line); |
| | | $newline = ""; |
| | | for($i = 0; $i < $linlen; $i++) |
| | | { |
| | | $c = substr( $line, $i, 1 ); |
| | | $dec = ord( $c ); |
| | | if ( ( $i == 0 ) && ( $dec == 46 ) ) // convert first point in the line into =2E |
| | | { |
| | | $c = "=2E"; |
| | | } |
| | | if ( $dec == 32 ) |
| | | { |
| | | if ( $i == ( $linlen - 1 ) ) // convert space at eol only |
| | | { |
| | | $c = "=20"; |
| | | } |
| | | else if ( $space_conv ) |
| | | { |
| | | $c = "=20"; |
| | | } |
| | | } |
| | | else if ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) // always encode "\t", which is *not* required |
| | | { |
| | | $h2 = floor($dec/16); |
| | | $h1 = floor($dec%16); |
| | | $c = $escape.$hex["$h2"].$hex["$h1"]; |
| | | } |
| | | |
| | | if ( (strlen($newline) + strlen($c)) >= $line_max ) // CRLF is not counted |
| | | { |
| | | $output .= $newline.$escape.$eol; // soft line break; " =\r\n" is okay |
| | | $newline = ""; |
| | | // check if newline first character will be point or not |
| | | if ( $dec == 46 ) |
| | | { |
| | | $c = "=2E"; |
| | | } |
| | | } |
| | | $newline .= $c; |
| | | } // end of for |
| | | $output .= $newline.$eol; |
| | | } // end of while |
| | | |
| | | return trim($output); |
| | | } |
| | | |
| | | |