Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z dekodowaniem treści maila
Forum PHP.pl > Forum > Przedszkole
gsawicki
Witam.

Mam problem. Zainstalowałem system help desk - Trellis Desk. Uruchomiłem rejestrowanie wiadomości e-mail poprzez pipe.php. Samo przechwytywanie działa dobrze, ale mam duży problem ze zdekodowaniem wiadomości. Wiadomość może być wysłana jako tekst / html / tekst i html, skrypt sam to rozpoznaje, usuwa tagi html, ale mam problem ze zdekodowaniem polskich znaczków, które mogą być jako unicode, iso, win itp.

Oryginalnie w skrypcie, za tą metodę jest odpowiedzialna ta linia:
$email['message'] = $ifthd->sanitize_data( utf8_encode( decode_ISO88591( imap_utf8( $email['message'] ) ) ) );
Jednak znaczki wyglądają albo tak:
fêó¿¼€
albo tak:
óęóś€śą€żóóęęńę

Jak tą linijkę przerobić aby polskie znaczki dobrze były konwertowane? Proszę o pomoc, bo sam sobie nie poradzę!

Pozdrawiam
Grzegorz
Black-Berry
A co sie dzieje jak dasz tak:

$email['message'] = $ifthd->sanitize_data($email['message']);

zmienia się cos ?

Przydałoby się wiedziec w jakim kodowaniu jest zmienna $email['message'] jakie masz nagłówki w mailu no i w jakim kodowaniu otwierasz maila smile.gif Słowem wtawiając wszystko wszędzie na UTF-8 powinno działać.
gsawicki
Witam.

Jeśli wiadomość jest w UTF to Twój kod powinien poprawnie zwrócić wiadomość.
Niestety jak jest w iso to zawsze będą krzaki. Zrobiłem sobie log po każdej funkcji, która jest w linii dekodującej i iso nigdy nie jest poprawne.
System wyświetla strony w UTF, więc powinna być konwersja na UTF. Myślę, że z wyborem kodowanie z maila bym sobie poradził, pytanie tylko jak to przekonwertować, moja wiedza na temat PHP ogranicza się do przekopiowania kodu ewentualnie z dużą pomocą helpa smile.gif

Pozdrawiam
Grzegorz
Black-Berry
W email headers powinna byc tez taka linijka: "Content-Type: text/html; charset=utf-8\n";
gsawicki
OK, to jeśli będzie UTF to sobie poradze, a jeśli będzie iso to jak mam to przekonwertować?
Black-Berry
Mozliwe ze problem tkwi w linijce decode_ISO88591
Polskie iso to chyba decode_ISO88592 z tego co pamietam
gsawicki
Witam.
decode_ISO88591 to funkcja w pliku pipe.php, która ma wpisane znaki, które trzeba podmienić w standardie ISO 88591, nie ma funkcji decode_ISO88592 w tym pliku ani wbudowanej w php. Ktoś po prostu tą funkcję ręcznie napisał. Czy to oznacza, że ja muszę taką funkcję napisać dla 88592 i win1250??

Pozdrawiam
Black-Berry
Wklej tą funkcję.
gsawicki
Oto treść funkcji:

function decode_ISO88591( $string )
{
$string = str_replace( "=\r\n", "", $string );

$string = str_replace("=?iso-8859-1?q?","",$string);
$string = str_replace("=?iso-8859-1?Q?","",$string);
$string = str_replace("?=","",$string);

$charHex = array( "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F" );

for( $z=0; $z < sizeof($charHex); $z++ )
{
for( $i=0; $i< sizeof($charHex); $i++ )
{
$string = str_replace( ("=" .( $charHex[$z].$charHex[$i] ) ), chr( hexdec( $charHex[$z].$charHex[$i]) ), $string );
}
}

return($string);
}
Black-Berry
no a jak podmienisz iso-8859-1 na iso-8859-2? to nic nie daje?
erix
Wyszukiwarka gryzie?!
http://forum.php.pl/index.php?showtopic=80...mail++kodowanie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.