gsawicki
6.12.2008, 15:23:29
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
6.12.2008, 15:28:58
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

Słowem wtawiając wszystko wszędzie na UTF-8 powinno działać.
gsawicki
6.12.2008, 15:38:36
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

Pozdrawiam
Grzegorz
Black-Berry
6.12.2008, 15:43:35
W email headers powinna byc tez taka linijka: "Content-Type: text/html; charset=utf-8\n";
gsawicki
6.12.2008, 15:55:39
OK, to jeśli będzie UTF to sobie poradze, a jeśli będzie iso to jak mam to przekonwertować?
Black-Berry
6.12.2008, 16:55:59
Mozliwe ze problem tkwi w linijce decode_ISO88591
Polskie iso to chyba decode_ISO88592 z tego co pamietam
gsawicki
8.12.2008, 02:34:29
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
8.12.2008, 12:02:46
Wklej tą funkcję.
gsawicki
8.12.2008, 14:24:51
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
8.12.2008, 14:36:40
no a jak podmienisz iso-8859-1 na iso-8859-2? to nic nie daje?
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.