- improvements in rcmail_html4inline()

release-0.6
alecpl 15 years ago
parent 84a3312f0b
commit b488c1d02d

@ -938,7 +938,7 @@ function rcmail_message_body($attrib)
$body = rcmail_print_body($part, array('safe' => $safe_mode, 'plain' => !$CONFIG['prefer_html'])); $body = rcmail_print_body($part, array('safe' => $safe_mode, 'plain' => !$CONFIG['prefer_html']));
if ($part->ctype_secondary == 'html') if ($part->ctype_secondary == 'html')
$out .= html::div('message-htmlpart', rcmail_html4inline($body, $attrib['id'] . ' div.rcmBody')); $out .= html::div('message-htmlpart', rcmail_html4inline($body, $attrib['id'], 'div.rcmBody'));
else else
$out .= html::div('message-part', $body); $out .= html::div('message-part', $body);
} }
@ -997,7 +997,7 @@ function rcmail_resolve_base($body)
/** /**
* modify a HTML message that it can be displayed inside a HTML page * modify a HTML message that it can be displayed inside a HTML page
*/ */
function rcmail_html4inline($body, $container_id) function rcmail_html4inline($body, $container_id, $body_id='')
{ {
$last_style_pos = 0; $last_style_pos = 0;
$body_lc = strtolower($body); $body_lc = strtolower($body);
@ -1008,7 +1008,7 @@ function rcmail_html4inline($body, $container_id)
$pos = strpos($body_lc, '>', $pos)+1; $pos = strpos($body_lc, '>', $pos)+1;
// replace all css definitions with #container [def] // replace all css definitions with #container [def]
$styles = rcmail_mod_css_styles(substr($body, $pos, $pos2-$pos), $container_id); $styles = rcmail_mod_css_styles(substr($body, $pos, $pos2-$pos), $container_id.($body_id ? ' '.$body_id : ''));
$body = substr($body, 0, $pos) . $styles . substr($body, $pos2); $body = substr($body, 0, $pos) . $styles . substr($body, $pos2);
$body_lc = strtolower($body); $body_lc = strtolower($body);
@ -1020,28 +1020,40 @@ function rcmail_html4inline($body, $container_id)
$body = preg_replace_callback('/<(a|link)\s+([^>]+)>/Ui', 'rcmail_alter_html_link', $body); $body = preg_replace_callback('/<(a|link)\s+([^>]+)>/Ui', 'rcmail_alter_html_link', $body);
unset($GLOBALS['rcmail_html_container_id']); unset($GLOBALS['rcmail_html_container_id']);
// add comments arround html and other tags
$out = preg_replace(array( $out = preg_replace(array(
// add comments arround html and other tags
'/(<!DOCTYPE[^>]*>)/i', '/(<!DOCTYPE[^>]*>)/i',
'/(<\?xml[^>]*>)/i', '/(<\?xml[^>]*>)/i',
'/(<\/?html[^>]*>)/i', '/(<\/?html[^>]*>)/i',
'/(<\/?head[^>]*>)/i', '/(<\/?head[^>]*>)/i',
'/(<title[^>]*>.*<\/title>)/Ui', '/(<title[^>]*>.*<\/title>)/Ui',
'/(<\/?meta[^>]*>)/i'), '/(<\/?meta[^>]*>)/i',
'<!--\\1-->', // quote <? of php and xml files that are specified as text/html
'/<\?/',
'/\?>/',
// replace <body> with <div>
'/<body([^>]*)>/i',
'/<\/body>/i',
),
array(
'<!--\\1-->',
'<!--\\1-->',
'<!--\\1-->',
'<!--\\1-->',
'<!--\\1-->',
'<!--\\1-->',
'&lt;?',
'?&gt;',
'<div class="rcmBody"\\1>',
'</div>',
),
$body); $body);
$out = preg_replace( // make sure there's 'rcmBody' div, we need it for proper css modification
array('/<body([^>]*)>/i', '/<\/body>/i'), // its name is hardcoded in rcmail_message_body() also
array('<div class="rcmBody"\\1>', '</div>'),
$out);
if (!preg_match('/<div class="rcmBody"/', $out)) if (!preg_match('/<div class="rcmBody"/', $out))
$out = '<div class="rcmBody">' . $out . '</div>'; $out = '<div class="rcmBody">' . $out . '</div>';
// quote <? of php and xml files that are specified as text/html
$out = preg_replace(array('/<\?/', '/\?>/'), array('&lt;?', '?&gt;'), $out);
return $out; return $out;
} }

Loading…
Cancel
Save