![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cześć, mam pewien problemi. Odbieram imapem wiadomości z gmaila.
Patrzę jaki ma encoding, na tej podstawie decoduje tekst. Patrzę jakie ma kodowanie i na tej podstawie koduje na utf8, czyli np. z iso-8859-2 zamieniam na utf8 Do tej pory wszystko było ok. Ale dziś natrafiłem na maile, które zachowywałe się bardzo dziwnie. Może przedstawię pseudokod jak do tej pory robiłem i było dobrze: Kod $body = 'Tutaj wiadomosc pobrana z imap'; jesli encoding = 1 to przepuszczaj wiadomosc przez imap_8bit() jesli jest charset, to zamieniaj z danego charset na utf8 I to jak pisałem działało do dzisiaj. Dziś trafiłem na wiadomość o treści: Cze?? czyli po poprawnym przekonwertowaniu ma wyjść Cześć. Niestety, po przekonwertowaniu wychodzi: Cze=B6=E6 Wiadomośc jest w kodowaniu iso-8859-2 wiec te krzaczki to są odpowiedniki w iso polskich liter. Jak się okazało, jeśli pominę krok: "jesli encoding = 1 to przepuszczaj wiadomosc przez imap_8bit()" to wiadomość jest poprawnie przekonwertowana. No i teraz mam zagwostkę, bo niektóre maile wymagają by konwertować je w zależności od encoding, a inne jak ten okazało się że nie. Nie jestem w stanie znaleźć zależności, która mi powie, które konwertować a które nie. Podam jeszcze atrybuty jakie zwraca imap dla tej wiadomosci: Cytat [type] => 0
[encoding] => 1 [ifsubtype] => 1 [subtype] => PLAIN [ifdescription] => 0 [ifid] => 0 [lines] => 19 [bytes] => 525 [ifdisposition] => 0 [ifdparameters] => 0 [ifparameters] => 1 [parameters] => Array ( [0] => stdClass Object ( [attribute] => CHARSET [value] => ISO-8859-2 ) [1] => stdClass Object ( [attribute] => FORMAT [value] => flowed ) ) ) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
@Bags_Bunny: Quoted-printable (QP) wstawia zakodowany znak za pomocą sekwencji: anak równości ("=") z następującym zaraz za tym znakiem kodem heksadecymalnym tego znaku. Przypadkiem się składa, że znak równości ma kod ASCII 61, czyli heksadecymalnie 3D. I kodowanie QP zamienia znak "=" na "=3D", POZORNIE dodając niepotrzebne znaki. Jedyny taki przypadek, ale dość charakterystyczny. I bardzo widoczny przy przesyłaniu HTMLi (IMG:style_emoticons/default/smile.gif)
@nospor: Ale, ale... Z manuala: imap_8bit — Convert an 8bit string to a quoted-printable string Czyli dekoduje Ci "Cześć" na "Cze=B6=E6" - i robi to zgodnie z założeniami i całkiem poprawnie. Pytanie jest inne: po co to dekodujesz do QP, skoro masz: Kod [0] => stdClass Object ( [attribute] => CHARSET [value] => ISO-8859-2 ) IMHO wiadomość jest "imap/8it", ale ta akurat część ma ściśle zdefiniowany format - wystarczy go odczytać i się do niego zastosować. Na marginesie: na pierwszy rzut oka podejrzewałem jakiś "broken" mailer. Lata temu (za czasów wprowadzania ISO-8859-2) była taka sytuacja, że mailery (tudzież czytniki news) wysyłały znaki kodowane w ISO-8859-2, ale w nagłówku wstawiały na bezczelnego iso-8859-1 (albo wręcz us-ascii). P.S. @nospor: niepożądany (IMG:style_emoticons/default/smile.gif) Ten post edytował abort 23.12.2011, 00:19:52 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 13.10.2025 - 23:32 |