Thread View: pl.comp.lang.php
7 messages
7 total messages
Started by Jędrzej Danko
Mon, 20 Aug 2001 09:58
Konwersja znakow z roznym kodowaniem
Author: Jędrzej Danko
Date: Mon, 20 Aug 2001 09:58
Date: Mon, 20 Aug 2001 09:58
14 lines
1607 bytes
1607 bytes
Mam problem z roznymi kodowaniami Tworze aplikacje - klienta poczty e-mail. Jako domyslne na stronie (w naglowkach META) mam standard kodowania iso-8859-1. Niestety, poczta przychodzi w najrozniejszych kodowaniach (najczesciej to windows-1250 i iso-8859-2). Wyswietlana wiadomosc zamienia sie w "niezla kaszanke" Jak tego uniknac? Inna sprawa. Gdy odczytuje naglowki listu, przetwarzam takze liste odbiorcow. Niektorzy maja, w sekcji 'personal', polskie znaki, ktore pozniej na stronie wygladaja tak: =?iso-8859-2?Q?J=EAdrzej_Danko?= zamiast Jedrzej Danko. Czy da sie to jakos obejsc? (najlepiej by bylo, aby pojawily sie prawidlowe znaki w prawidlowym standardzie kodowania) Jedrzej Danko
Re: Konwersja znakow z roznym kodowaniem
Author: Tomasz Nidecki
Date: Mon, 20 Aug 2001 10:07
Date: Mon, 20 Aug 2001 10:07
24 lines
2331 bytes
2331 bytes
In article <9lqmsj$s88$1@news.tpi.pl>, "Jźdrzej Danko" <singollo@poczta.arena.pl> wrote: > iso-8859-1. Niestety, poczta przychodzi w najrozniejszych kodowaniach > (najczesciej to windows-1250 i iso-8859-2). Wyswietlana wiadomosc > zamienia > sie w "niezla kaszanke" Jak tego uniknac? mail($adres,$temat,$tresc,"MIME-Version: 1.0\nContent-Type: text/plain;\tcharset=\"iso-8859-2\"\nContent-Transfer-Encoding: 8bit"); > Danko. Czy da sie to jakos obejsc? (najlepiej by bylo, aby pojawily sie > prawidlowe znaki w prawidlowym standardzie kodowania) Nie wiem czy jest funkcja PHP ktora odkodowuje toto (po prostu nie szukalem), ale moze byc, musisz pogrzebac w manualu. A jak nie to trzeba wlasny algorytm zrobic. -- tomasz 'tonid' nidecki, zoliborz, warszawa, poland mailto:tonid@tonid.net http://endemic.tonid.net webmaster: http://www.badis.com.pl, http://www.latos.pl http://www.akwarystyka.pl, http://www.groovecontrol.pl PGP: 11E3 2772 7E95 8962 F932 7FAA 72F2 4CCC 1C70 DB83
Re: Konwersja znakow z roznym kodowaniem
Author: Andrzej Kaczmarek
Date: Mon, 20 Aug 2001 10:21
Date: Mon, 20 Aug 2001 10:21
51 lines
2779 bytes
2779 bytes
Jędrzej Danko napisał(a):
> Mam problem z roznymi kodowaniami
> Tworze aplikacje - klienta poczty e-mail.
> Jako domyslne na stronie (w naglowkach META) mam standard kodowania
> iso-8859-1. Niestety, poczta przychodzi w najrozniejszych kodowaniach
> (najczesciej to windows-1250 i iso-8859-2). Wyswietlana wiadomosc zamienia
> sie w "niezla kaszanke" Jak tego uniknac?
#v+
function cp1250toiso88592($string)
{
return strtr($string, "ąś¤Ź¨ăཥŠä˘žŤ", "ąśĄĆĘŁŃÓŚŻŹąćęłńóśżź");
}
#v-
> Inna sprawa. Gdy odczytuje naglowki listu, przetwarzam takze liste
> odbiorcow. Niektorzy maja, w sekcji 'personal', polskie znaki, ktore pozniej
> na stronie wygladaja tak: =?iso-8859-2?Q?J=EAdrzej_Danko?= zamiast Jedrzej
> Danko. Czy da sie to jakos obejsc? (najlepiej by bylo, aby pojawily sie
> prawidlowe znaki w prawidlowym standardzie kodowania)
Na przykład tak:
#v+
# dekoduje quoted-printable i base64 z automatycnym rozpoznaniem formatu
function auto_decode($string) {
if (preg_match("/\=\?(.*?)\?b\?/i", $string)) $string = b64_decode($string);
if (preg_match("/\=\?(.*?)\?q\?/i", $string)) $string = qp_decode($string);
return $string;
}
# dekoduje quoted-printable
function qp_decode($string) {
$string = preg_replace("/\=\?(.*?)\?q\?(.*?)\?\=/ieU", "quoted_printable_decode('\\2')", $string);
$string = ereg_replace("_", " ", $string);
$string = stripslashes($string);
return $string;
}
# dekoduje base64
function b64_decode($string) {
$string = preg_replace("/\=\?(.*?)\?b\?(.*?)\?\=/ieU", "base64_decode('\\2')", $string);
return $string;
}
echo auto_decode("=?iso-8859-2?Q?J=EAdrzej_Danko?=");
#v-
--
pozdrawiam,
Andrzej
Re: Konwersja znakow z roznym kodowaniem
Author: Jacek Czapla
Date: Mon, 20 Aug 2001 10:26
Date: Mon, 20 Aug 2001 10:26
69 lines
3151 bytes
3151 bytes
> Mam problem z roznymi kodowaniami
> Tworze aplikacje - klienta poczty e-mail.
> Jako domyslne na stronie (w naglowkach META) mam standard kodowania
> iso-8859-1. Niestety, poczta przychodzi w najrozniejszych kodowaniach
> (najczesciej to windows-1250 i iso-8859-2). Wyswietlana wiadomosc zamienia
> sie w "niezla kaszanke" Jak tego uniknac?
Witam.
Przerobiony (skrocony) przyklad z jaiejs gazetki (chyba Linux+)
Funkcja pobiera lancuch zankow i max. liczbe liter w lancuchu (przydatne
jesli lancuch ma byc zapisany pozniej do bazy danych)
Wywolanie:
$new_string=konwertuj($old_string, $max_chars);
Na poczatku na podstawie tablicy kodow ASCII generowany jest string
($cp_polskie) zawierajacy literki w WIN 1250 (tylko te, ktorych kody ASCII
roznia sie od kodowania w ISO-8859-2),
$cp_kody = array (185,159,156,165,143,140);
$ten = current ($cp_kody);
while ($ten) {
$cp_polskie .= chr ($ten);
$ten = next ($cp_kody);
}
potem tworzony jest lancuch z odpowiednikami literek w ISO-8859-2 (w tej
samej kolejnosci co kody w WIN 1250)
$iso_polskie = "?ą?Ě?|";
i wlasciwa funkcja podmieniajaca w zmiennej $lancuch znaki z $cp_polskie na
odpowiedajace mu (wg kolejnosci wystepowania w lancuchu) znaki z
$iso_polskie
$lancuch = strtr ($lancuch, $cp_polskie, $iso_polskie);
a potem juz tylko sprawdzenie dlugosci, ewentualne przyciecie i zwrocenie
zmienionego lancucha.
Calosc wyglada tak:
function konwertuj ($lancuch, $maxliter)
$cp_kody = array (185,159,156,165,143,140);
$ten = current ($cp_kody);
while ($ten) {
$cp_polskie .= chr ($ten);
$ten = next ($cp_kody);
}
$iso_polskie = "?ą?Ě?|";
/* konwersja liter */
$lancuch = strtr ($lancuch, $cp_polskie, $iso_polskie);
$dlugosc = strlen ($lancuch);
if ($dlugosc > $maxliter) {
$drugi = substr ($lancuch,0,$maxliter);
return $drugi;
}
return $lancuch;
}
Funkcja ta zamienia znaki z WIN 1250 na IS)-8859-2
Pozdrowienia
------------------------------------------------------------
Jacek Czapla jczapla@lctt.pol.lublin.pl
------------------------------------------------------------
Re: Konwersja znakow z roznym kodowaniem
Author: Metempsychoza
Date: Tue, 21 Aug 2001 01:05
Date: Tue, 21 Aug 2001 01:05
40 lines
2024 bytes
2024 bytes
Użytkownik "Jędrzej Danko" <singollo@poczta.arena.pl> napisał w wiadomości
news:9lqmsj$s88$1@news.tpi.pl...
> Inna sprawa. Gdy odczytuje naglowki listu, przetwarzam takze liste
> odbiorcow. Niektorzy maja, w sekcji 'personal', polskie znaki, ktore
pozniej
> na stronie wygladaja tak: =?iso-8859-2?Q?J=EAdrzej_Danko?= zamiast Jedrzej
> Danko. Czy da sie to jakos obejsc? (najlepiej by bylo, aby pojawily sie
> prawidlowe znaki w prawidlowym standardzie kodowania)
<?php
class DecodeHeader {
function DecodeHeader (&$str) {
$pattern = "/\=\?(.+?)\?(B|Q)?\?(.+?)\?\=\r?\n?/is";
preg_match_all ($pattern, $str, $regs);
$str = implode("", $regs[3]);
$function = current($regs[2]);
$this->$function($str);
}
function Q (&$str) {
$pattern = "/\=([0-9A-Za-z]{2})/e";
$replacement = "'".chr (hexdec ("\\1"))."'";
$str = preg_replace ($pattern, $replacement, $str);
}
function B (&$str) {
$str = base64_decode ($str);
}
}
/* sposob uzycia */
$str = "=?iso-8859-2?Q?J=EAdrzej_Danko?= ";
new DecodeHeader($str);
echo $str;
?>
--
metempsychoza(at)wp.pl
Re: Konwersja znakow z roznym kodowaniem
Author: Piotr Pawlow
Date: Thu, 23 Aug 2001 03:09
Date: Thu, 23 Aug 2001 03:09
10 lines
1288 bytes
1288 bytes
> Nie wiem czy jest funkcja PHP ktora odkodowuje toto (po prostu nie > szukalem), ale moze byc, musisz pogrzebac w manualu. iconv (http://www.php.net/manual/en/ref.iconv.php) jest od wersji 4.0.5. -- Pozdrawiam, Piotr Pawłow mailto:pp@siedziba.pl, homepage: http://pp.siedziba.pl
Re: Konwersja znakow z roznym kodowaniem
Author: Piotr Pawlow
Date: Thu, 23 Aug 2001 03:17
Date: Thu, 23 Aug 2001 03:17
9 lines
1270 bytes
1270 bytes
Zapomniałem jeszcze, do dekodowania MIME jest funkcja: http://www.php.net/manual/en/function.imap-mime-header-decode.php Zwraca tablice stringow i kodowan, wrzucasz to na iconv'a i po sprawie. -- Pozdrawiam, Piotr Pawłow mailto:pp@siedziba.pl, homepage: http://pp.siedziba.pl
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads