🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#336
Author: Jędrzej Danko
Date: Mon, 20 Aug 2001 09:58
14 lines
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
#337
Author: Tomasz Nidecki
Date: Mon, 20 Aug 2001 10:07
24 lines
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
#340
Author: Andrzej Kaczmarek
Date: Mon, 20 Aug 2001 10:21
51 lines
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
#341
Author: Jacek Czapla
Date: Mon, 20 Aug 2001 10:26
69 lines
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
#342
Author: Metempsychoza
Date: Tue, 21 Aug 2001 01:05
40 lines
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
#338
Author: Piotr Pawlow
Date: Thu, 23 Aug 2001 03:09
10 lines
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
#339
Author: Piotr Pawlow
Date: Thu, 23 Aug 2001 03:17
9 lines
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