- Fix hanling of HTML entity strings in plai text messages

release-0.6
alecpl 14 years ago
parent a4c970508b
commit 6084d782f2

@ -69,6 +69,7 @@ CHANGELOG Roundcube Webmail
- Fix handling of folders with name "0" (#1487119)
- Fix handling of folders with "<>" characters in name
- jQuery 1.4.4
- Fix handling of HTML entity strings in plain text messages
RELEASE 0.4.2
-------------

@ -167,7 +167,6 @@ class html2text
'/&(apos|rsquo|lsquo|#8216|#8217);/i', // Single quotes
'/&gt;/i', // Greater-than
'/&lt;/i', // Less-than
'/&(amp|#38);/i', // Ampersand
'/&(copy|#169);/i', // Copyright
'/&(trade|#8482|#153);/i', // Trademark
'/&(reg|#174);/i', // Registered
@ -176,6 +175,7 @@ class html2text
'/&(bull|#149|#8226);/i', // Bullet
'/&(pound|#163);/i', // Pound sign
'/&(euro|#8364);/i', // Euro sign
'/&(amp|#38);/i', // Ampersand: see _converter()
'/[ ]{2,}/' // Runs of spaces, post-handling
);
@ -210,7 +210,6 @@ class html2text
"'", // Single quotes
'>',
'<',
'&',
'(c)',
'(tm)',
'(R)',
@ -219,6 +218,7 @@ class html2text
'*',
'£',
'EUR', // Euro sign. € ?
'|+|amp|+|', // Ampersand: see _converter()
' ' // Runs of spaces, post-handling
);
@ -502,7 +502,11 @@ class html2text
$text = preg_replace_callback($this->callback_search, array('html2text', '_preg_callback'), $text);
// Remove unknown/unhandled entities (this cannot be done in search-and-replace block)
$text = preg_replace('/&#?[a-z0-9]{2,7};/i', '', $text);
$text = preg_replace('/&([a-zA-Z0-9]{2,6}|#[0-9]{2,4});/', '', $text);
// Convert "|+|amp|+|" into "&", need to be done after handling of unknown entities
// This properly handles situation of "&amp;quot;" in input string
$text = str_replace('|+|amp|+|', '&', $text);
// Strip any other HTML tags
$text = strip_tags($text, $this->allowed_tags);

@ -646,9 +646,20 @@ function rcmail_compose_body($attrib)
$out .= $msgtype->show();
// If desired, set this textarea to be editable by TinyMCE
if ($isHtml) $attrib['class'] = 'mce_editor';
$textarea = new html_textarea($attrib);
$out .= $textarea->show($MESSAGE_BODY);
if ($isHtml) {
$attrib['class'] = 'mce_editor';
$textarea = new html_textarea($attrib);
$out .= $textarea->show($MESSAGE_BODY);
}
else {
$textarea = new html_textarea($attrib);
$out .= $textarea->show('');
// quote plain text, inject into textarea
$table = get_html_translation_table(HTML_SPECIALCHARS);
$MESSAGE_BODY = strtr($MESSAGE_BODY, $table);
$out = substr($out, 0, -11) . $MESSAGE_BODY . '</textarea>';
}
$out .= $form_end ? "\n$form_end" : '';
$OUTPUT->set_env('composebody', $attrib['id']);

@ -0,0 +1,46 @@
<?php
/**
* Test class to test html2text class
*
* @package Tests
*/
class rcube_test_html2text extends UnitTestCase
{
function __construct()
{
$this->UnitTestCase("HTML-to-Text conversion tests");
}
function test_html2text()
{
$data = array(
0 => array(
'title' => 'Test entry',
'in' => '',
'out' => '',
),
1 => array(
'title' => 'Basic HTML entities',
'in' => '&quot;&amp;',
'out' => '"&',
),
2 => array(
'title' => 'HTML entity string',
'in' => '&amp;quot;',
'out' => '&quot;',
),
);
$ht = new html2text(null, false, false);
foreach ($data as $item) {
$ht->set_html($item['in']);
$res = $ht->get_text();
$this->assertEqual($item['out'], $res, $item['title']);
}
}
}
Loading…
Cancel
Save