// figures out what entity to display and returns the $message object
// for that entity.
- function findDisplayEntity ($message, $next = 'none')
+ function findDisplayEntity ($message, $textOnly = 1, $next = 'none')
{
global $show_html_default;
// Show text/plain or text/html -- the first one we find.
if ($message->header->type0 == 'text' &&
($message->header->type1 == 'plain' ||
- $message->header->type2 == 'html'))
+ $message->header->type1 == 'html'))
{
// If the next part is an HTML version, this will
// all be true. Show it, if the user so desires.
// HTML mails this way all have entity_id of 2. 1 = text/plain
if ($next != 'none' &&
+ $textOnly == 0 &&
$next->header->type0 == "text" &&
$next->header->type1 == "html" &&
$next->header->entity_id == 2 &&
}
else
{
- for ($i=0; $message->entities[$i]; $i++)
+ for ($i=0; isset($message->entities[$i]); $i++)
{
$next = 'none';
if (isset($message->entities[$i + 1]))
$next = $message->entities[$i + 1];
- $entity = findDisplayEntity($message->entities[$i], $next);
+ $entity = findDisplayEntity($message->entities[$i],
+ $textOnly, $next);
if ($entity != 0)
return $entity;
}
$urlmailbox = urlencode($message->header->mailbox);
// Get the right entity and redefine message to be this entity
- $ent_num = findDisplayEntity ($message);
+ // Pass the 0 to mean that we want the 'best' viewable one
+ $ent_num = findDisplayEntity ($message, 0);
$body_message = getEntity($message, $ent_num);
if (($body_message->header->type0 == "text") ||
($body_message->header->type0 == "rfc822")) {
$replace = ereg_replace("_", " ", $res[3]);
// Convert lowercase Quoted Printable to uppercase for
// quoted_printable_decode to understand it.
- while (ereg("(=([0-9][abcdef])|([abcdef][0-9])|([abcdef][abcdef]))", $replace, $res)) {
+ while (ereg("(=(([0-9][abcdef])|([abcdef][0-9])|([abcdef][abcdef])))", $replace, $res)) {
$replace = str_replace($res[1], strtoupper($res[1]), $replace);
}
$replace = quoted_printable_decode($replace);
$replace = charset_decode ($res[1], $replace);
- $string = eregi_replace
- ('=\\?([^?]+)\\?(q|b)\\?([^?]+)\\?=',
+ // Remove the name of the character set.
+ $string = eregi_replace ('=\\?([^?]+)\\?(q|b)\\?([^?]+)\\?=',
$replace, $string);
+
// In case there should be more encoding in the string: recurse
return (decodeHeader($string));
} else
// Encode only if the string contains 8-bit characters or =?
if (ereg("([\200-\377]|=\\?)", $string)) {
- $newstring = "=?$default_charset?Q?";
// First the special characters
$string = str_replace("=", "=3D", $string);
$replace = chr($ch);
$insert = sprintf("=%02X", $ch);
$string = str_replace($replace, $insert, $string);
- $ch++;
}
$newstring = "=?$default_charset?Q?".$string."?=";