Ik gebruik Zend_Mail uit Zend Framework om mails uit te lezen en deze wil ik opslaan in de database.
Encoding instellingen:
Datatabase: UTF8
Iconv: UTF8 (init_set)
mbstring: UTF8 (ini_set)
html-meta: UTF8
Als ik het part met text/html heb gevonden, en deze blijkt "quoted-printable" te zijn, haal ik hier de functie
"quoted_printable_decode"
overheen. In de meeste gevallen werkt dit goed. Ik heb echter een e-mail ontvangen waar deze tekenreeks in staat:
=A0
Dit blijkt een ISO-8858 non-breaking space te zijn. In UTF8 moet dit volgens mij =C2=A0 worden (of \xC2\xA0).
Wat ik heb geprobeerd
Als ik dit opsla, geeft Postgres als melding dat \xA0 geen geldig utf-karakter is. Dit klopt volgens mij ook.
Als ik dit opsla, krijg ik de Â
Dit lijkt me sowieso een slecht idee, maar je wilt wat. De laatste \xA0 heb ik ook veranderd naar =C2=A0 of \xC2\xA0
Ik heb ook nog over schillende plekken wat geprobeert met mb_convert_encoding. Ook geen succes..
Google geeft vele hits, maar dit specifieke probleem kan ik helaas nog steeds niet tackelen.
Encoding instellingen:
Datatabase: UTF8
Iconv: UTF8 (init_set)
mbstring: UTF8 (ini_set)
html-meta: UTF8
Als ik het part met text/html heb gevonden, en deze blijkt "quoted-printable" te zijn, haal ik hier de functie
"quoted_printable_decode"
overheen. In de meeste gevallen werkt dit goed. Ik heb echter een e-mail ontvangen waar deze tekenreeks in staat:
=A0
Dit blijkt een ISO-8858 non-breaking space te zijn. In UTF8 moet dit volgens mij =C2=A0 worden (of \xC2\xA0).
Wat ik heb geprobeerd
PHP:
1
2
3
4
5
| protected function _quotedPrintableContent( \Zend_Mail_Part $part ){ $content = $part->getContent(); $content = quoted_printable_decode($content); return $content; } |
Als ik dit opsla, geeft Postgres als melding dat \xA0 geen geldig utf-karakter is. Dit klopt volgens mij ook.
code:
1
2
3
4
5
6
| protected function _quotedPrintableContent( \Zend_Mail_Part $part ){
$content = $part->getContent();
$content = quoted_printable_decode($content);
$content = mb_convert_encoding($content, 'UTF8');
return $content;
} |
Als ik dit opsla, krijg ik de Â
code:
1
2
3
4
5
6
7
| protected function _quotedPrintableContent( \Zend_Mail_Part $part ){
$content = $part->getContent();
$content = str_replace(array('=C2=A0', '=A0', '=XX=='), array('=XX==','=XX==', "\xA0"), $content);
$content = quoted_printable_decode($content);
$content = mb_convert_encoding($content, 'UTF8');
return $content;
} |
Dit lijkt me sowieso een slecht idee, maar je wilt wat. De laatste \xA0 heb ik ook veranderd naar =C2=A0 of \xC2\xA0
Ik heb ook nog over schillende plekken wat geprobeert met mb_convert_encoding. Ook geen succes..
Google geeft vele hits, maar dit specifieke probleem kan ik helaas nog steeds niet tackelen.
"Chaos kan niet uit de hand lopen"