[horde] IMP: Encoding problem in message view
Deokgon Kim
dgkim at dgkim.net
Thu Feb 25 07:47:03 UTC 2016
2016년 01월 12일 05:45에 Michael J Rubinsky 이(가) 쓴 글:
>
> Quoting 김 덕곤 <dgkim at dgkim.net>:
>
>> 2015. 12. 31. 오후 10:29에 Jan Schneider 이(가) 쓴 글:
>>>
>>> Zitat von 김 덕곤 <dgkim at dgkim.net>:
>>>
>>>> Hello.
>>>>
>>>> When I opening a message(that is not encoded in UTF-8),
>>>> character is not shown in correct encoding.
>>>>
>>>> But, when I reply or forward it, correct character is shown.
>>>> (And, the replied message is encoded in UTF-8)
>>>>
>>>> When I open a message as popup(Show all parts, and click on a part),
>>>> character is also in a wrong encoding,
>>>> but if I change character encoding to Unicode in a Browser option,
>>>> correct character is shown.
>>>> This means server already converted form encoding to encoding,
>>>> but wrong Content-Type is sent.
>>>>
>>>> A message's encoding is 'ks_c_5601-1987'
>>>> Web page's encoding is 'UTF-8'.
>>>>
>>>> Any suggestions?
>>>>
>>>> Versions.
>>>> Horde : 5.2.8
>>>> IMP : 6.2.11
>>>>
>>>> --
>>>> Horde mailing list
>>>> Frequently Asked Questions: http://horde.org/faq/
>>>> To unsubscribe, mail: horde-unsubscribe at lists.horde.org
>>>
>>> https://bugs.horde.org/ticket/14149
>>>
>> I think I figured out why this happens.
>>
>> In Domhtml, at the line of 87, there is call to "convertCharset". as
>> follows.
>>
>> 86 $this->_loadHTML(
>> 87 $this->_xmlencoding .
>> Horde_String::convertCharset($text, $c harset, 'UTF-8')
>> 88 );
>>
>> Here is the call-stack dumped from Horde_Domhtml::__construct().
>>
>> __construct: Called from /usr/share/php/Horde/Text/Filter/Xss.php:72
>> __construct 1. Horde_Text_Filter_Xss->postProcess()
>> /usr/share/php/Horde/Text/Filter.php:108
>> __construct 2. Horde_Text_Filter->filter()
>> /usr/share/php/Horde/Core/Factory/TextFilter.php:72
>> __construct 3. Horde_Core_Factory_TextFilter->filter() -:-
>> __construct 4. call_user_func()
>> /usr/share/php/Horde/Mime/Viewer/Base.php:438
>> __construct 5. Horde_Mime_Viewer_Base->_textFilter()
>> /usr/share/php/Horde/Mime/Viewer/Html.php:164
>> __construct 6. Horde_Mime_Viewer_Html->_cleanHTML()
>> /var/www/html/horde/imp/lib/Mime/Viewer/Html.php:179
>> __construct 7. IMP_Mime_Viewer_Html->_IMPrender()
>> /var/www/html/horde/imp/lib/Mime/Viewer/Html.php:75
>> __construct 8. IMP_Mime_Viewer_Html->_renderInline()
>> /usr/share/php/Horde/Mime/Viewer/Base.php:156
>> __construct 9. Horde_Mime_Viewer_Base->render()
>> /var/www/html/horde/imp/lib/Contents.php:654
>> __construct 10. IMP_Contents->renderMIMEPart()
>> /var/www/html/horde/imp/lib/Mime/Viewer/Alternative.php:128
>> __construct 11. IMP_Mime_Viewer_Alternative->_IMPrender()
>> /var/www/html/horde/imp/lib/Mime/Viewer/Alternative.php:54
>> __construct 12. IMP_Mime_Viewer_Alternative->_renderInline()
>> /usr/share/php/Horde/Mime/Viewer/Base.php:156
>> __construct 13. Horde_Mime_Viewer_Base->render()
>> /var/www/html/horde/imp/lib/Contents.php:654
>> __construct 14. IMP_Contents->renderMIMEPart()
>> /var/www/html/horde/imp/lib/Contents.php:1462
>> __construct 15. IMP_Contents->getInlineOutput()
>> /var/www/html/horde/imp/lib/Ajax/Application/ShowMessage.php:296
>> __construct 16. IMP_Ajax_Application_ShowMessage->showMessage()
>> /var/www/html/horde/imp/lib/Dynamic/Message.php:64
>> __construct 17. IMP_Dynamic_Message->_init()
>> /var/www/html/horde/imp/lib/Dynamic/Base.php:90
>> __construct 18. IMP_Dynamic_Base->__construct()
>> /var/www/html/horde/imp/dynamic.php:33
>>
>> I tried to find where the 'convertCharset' occurs.
>>
>> I found in 'Horde/Mime/Viewer/Html.php'. (line 106 to 114)
>>
>> 106 protected function _renderInline()
>> 107 {
>> 108 $html =
>> $this->_cleanHTML($this->_mimepart->getContents(), array('in line'
>> => true));
>> 109
>> 110 return $this->_renderReturn(
>> 111 Horde_String::convertCharset($html->returnHtml(),
>> $this->_mimepa rt->getCharset(), 'UTF-8'),
>> 112 'text/html; charset=UTF-8'
>> 113 );
>> 114 }
>>
>> So I think, 'convertCharset' is unintentionally called twice.
>
> Horde_Mime_Viewer::_renderInline() isn't (shouldn't) be called in this
> context, since we are in IMP_Mime_Viewer_Html, which overrides the
> parent's copy of the _renderInLine() method.
>
>
>
Hello.
Today I tried to figure out a little more.
I do understand Horde_Mime_Viewer::_renderinline() isn't called at this
context.
And I still have the problem.
When I change code not to 'convertCharset', It works.
(/usr/share/php/Horde/Domhtml.php)
83 /* Convert/try with UTF-8 first. */
84 $this->_origCharset = Horde_String::lower($charset);
85 $this->_xmlencoding = '<?xml encoding="UTF-8"?>';
86 $this->_loadHTML(
87 $this->_xmlencoding .
Horde_String::convertCharset($text, $charset, 'UTF-8')
88 );
At the line of 87.
Why, in the first place, converting to UTF-8?
And
what if body part of html($text) doesn't contains fully structured HTML,
Can Domhtml.php handle it?
(I tested DOMDocument object, if the $text doesn't contains [meta
charset], 'dom->encoding' is not working.)
And what is the state of $text?
Does Content-Transfer-Encoding is processed?
To confirm, this problem is all related to Domhtml.php,
what can be the status of member variables?
Or is this problem related to php DOMDocument?
More information about the horde
mailing list