🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.php
Article #341

Re: Konwersja znakow z roznym kodowaniem

#341
From: 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
------------------------------------------------------------
Technical Details
Message-ID: <9lqouh$2tl$1@news.lublin.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!news.man.poznan.pl!fargo.cgs.poznan.pl!news.internetia.pl!news.nask.pl!lublin.pl!news.lublin.pl!not-for-mail
References: <9lqmsj$s88$1@news.tpi.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!news.man.poznan.pl!fargo.cgs.poznan.pl!news.internetia.pl!news.nask.pl!lublin.pl!news.lublin.pl!not-for-mail
From: "Jacek Czapla" <jczapla@lctt.pol.lublin.pl>
Newsgroups: pl.comp.lang.php
Subject: Re: Konwersja znakow z roznym kodowaniem
Date: Mon, 20 Aug 2001 12:26:58 +0200
Organization: lubman
Lines: 71
Message-ID: <9lqouh$2tl$1@news.lublin.pl>
References: <9lqmsj$s88$1@news.tpi.pl>
NNTP-Posting-Host: automat.pol.lublin.pl
X-Trace: news.lublin.pl 998303505 2997 212.182.17.61 (20 Aug 2001 10:31:45 GMT)
X-Complaints-To: abuse@news.lublin.pl
NNTP-Posting-Date: Mon, 20 Aug 2001 10:31:45 +0000 (UTC)
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 5.00.2919.6700
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6700
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit