ĄŚŹ, czyli polskie ogonki w Internecie



Podobne dokumenty
Opis programu do wizualizacji algorytmów z zakresu arytmetyki komputerowej

Temat: Funkcje. Własności ogólne. A n n a R a j f u r a, M a t e m a t y k a s e m e s t r 1, W S Z i M w S o c h a c z e w i e 1

Specyfikacja techniczna banerów Flash

WYKŁAD 8. Postacie obrazów na różnych etapach procesu przetwarzania

Wtedy wystarczy wybrać właściwego Taga z listy.

Systemy mikroprocesorowe - projekt

API transakcyjne BitMarket.pl

9. Dynamiczne generowanie grafiki, cz. 3

Zarządzanie Zasobami by CTI. Instrukcja

Instrukcja obsługi platformy zakupowej e-osaa (klient podstawowy)

Konfiguracja historii plików

1. Podstawy budowania wyra e regularnych (Regex)

System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy

Podstawa programowa kształcenia ogólnego informatyki w gimnazjum

Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych ul. Koszykowa 75, Warszawa

System zarządzania bazą danych (SZBD) Proces przechodzenia od świata rzeczywistego do jego informacyjnej reprezentacji w komputerze nazywać będziemy

GEO-SYSTEM Sp. z o.o. GEO-RCiWN Rejestr Cen i Wartości Nieruchomości Podręcznik dla uŝytkowników modułu wyszukiwania danych Warszawa 2007

Komentarz technik ochrony fizycznej osób i mienia 515[01]-01 Czerwiec 2009

Surowiec Zużycie surowca Zapas A B C D S 1 0,5 0,4 0,4 0, S 2 0,4 0,2 0 0, Ceny x

Instrukcja obsługi Norton Commander (NC) wersja 4.0. Autor: mgr inż. Tomasz Staniszewski

System kontroli wersji SVN

PODSTAWY METROLOGII ĆWICZENIE 4 PRZETWORNIKI AC/CA Międzywydziałowa Szkoła Inżynierii Biomedycznej 2009/2010 SEMESTR 3

Formularz Zgłoszeniowy propozycji zadania do Szczecińskiego Budżetu Obywatelskiego na 2016 rok

Użytkowanie elektronicznego dziennika UONET PLUS.

Microsoft Management Console

InsERT GT Własne COM 1.0

dbsamples.udl lub przygotowany wcześniej plik dla Excela) i OK,

Archiwum Prac Dyplomowych

Rozdział 6. Pakowanie plecaka. 6.1 Postawienie problemu

SZABLONY KOMUNIKATÓW SPIS TREŚCI

Uchwały podjęte przez Nadzwyczajne Walne Zgromadzenie Zakładów Lentex S.A. z dnia 11 lutego 2014 roku

Metody Programowania

Instalacja. Zawartość. Wyszukiwarka. Instalacja Konfiguracja Uruchomienie i praca z raportem Metody wyszukiwania...

7. OPRACOWYWANIE DANYCH I PROWADZENIE OBLICZEŃ powtórka

Instalacja programu. Omówienie programu. Jesteś tu: Bossa.pl

1. Rozwiązać układ równań { x 2 = 2y 1

EGZAMIN MATURALNY Z INFORMATYKI 19 MAJA 2015

Jak korzystać z Group Tracks w programie Cubase na przykładzie EWQLSO Platinum (Pro)

STRONA GŁÓWNA SPIS TREŚCI. Zarządzanie zawartością stron... 2 Tworzenie nowej strony... 4 Zakładka... 4 Prawa kolumna... 9

Regulamin Obrad Walnego Zebrania Członków Stowarzyszenia Lokalna Grupa Działania Ziemia Bielska

INFORMATOR TECHNICZNY WONDERWARE

Arkusz zawiera informacje prawnie chronione do momentu rozpocz cia egzaminu.

Komentarz do prac egzaminacyjnych w zawodzie technik administracji 343[01] ETAP PRAKTYCZNY EGZAMINU POTWIERDZAJĄCEGO KWALIFIKACJE ZAWODOWE

Praca na wielu bazach danych część 2. (Wersja 8.1)

Projektowanie bazy danych

PERSON Kraków

Niniejszy ebook jest własnością prywatną.

Automatyczne przetwarzanie recenzji konsumenckich dla oceny użyteczności produktów i usług

Rozliczenia z NFZ. Ogólne założenia. Spis treści

System Zarządzania Relacyjną Bazą Danych (SZRBD) Microsoft Access 2010

Ćwiczenie 6.5. Otwory i śruby. Skrzynia V

VinCent Office. Moduł Drukarki Fiskalnej

HAŚKO I SOLIŃSKA SPÓŁKA PARTNERSKA ADWOKATÓW ul. Nowa 2a lok. 15, Wrocław tel. (71) fax (71) kancelaria@mhbs.

Zintegrowane Systemy Zarządzania Biblioteką SOWA1 i SOWA2 SKONTRUM

Automatyzacja procesu publikowania w bibliotece cyfrowej

MATEMATYKA 4 INSTYTUT MEDICUS FUNKCJA KWADRATOWA. Kurs przygotowawczy na studia medyczne. Rok szkolny 2010/2011. tel

Program szkoleniowy Efektywni50+ Moduł III Standardy wymiany danych

Umowa w sprawie przyznania grantu Marie Curie 7PR Wykaz klauzul specjalnych

Tworzenie wielopoziomowych konfiguracji sieci stanowisk asix z separacją segmentów sieci - funkcja POMOST. Pomoc techniczna

Ogólna charakterystyka kontraktów terminowych

Wyższa Szkoła Zarządzania i Bankowości w Krakowie

Przedmiot: Projektowanie dokumentów WWW. Laboratorium 3: Strona domowa cz. III Formularze. Opracował: Maciej Chyliński

Metody opracowywania dokumentów wielostronicowych. Technologia Informacyjna Lekcja 28

Moduł. Rama 2D suplement do wersji Konstruktora 4.6

Warszawska Giełda Towarowa S.A.

Sieć komputerowa grupa komputerów lub innych urządzeo połączonych ze sobą w celu wymiany danych lub współdzielenia różnych zasobów, na przykład:

STOWARZYSZENIE LOKALNA GRUPA DZIAŁANIA JURAJSKA KRAINA REGULAMIN ZARZĄDU. ROZDZIAŁ I Postanowienia ogólne

Zdalne odnawianie certyfikatów do SWI


MySource Matrix CMS - PROSTY INTERFEJS UŻYTKOWNIKA. INSTRUKCJA ver 1.2

Adapter USB do CB32. MDH-SYSTEM ul. Bajkowa 5, Lublin tel./fax lub kom e mail: info@mdh-system.pl

Uchwała Nr... Rady Miejskiej Będzina z dnia roku

Bazy danych. Andrzej Łachwa, UJ, /15

14.Rozwiązywanie zadań tekstowych wykorzystujących równania i nierówności kwadratowe.

CitiDirect EB - Mobile

KLAUZULE ARBITRAŻOWE

Wewnątrzszkolny system kształcenia PLAN WYNIKOWY

Instrukcja programu PControl Powiadowmienia.

INSTRUKCJA DO INTERNETOWEGO ROZKŁADU JAZDY

Symfonia Produkcja Instrukcja instalacji. Wersja 2013

Zadania ćwiczeniowe do przedmiotu Makroekonomia I

OptiMore Importer Rejestru VAT. Instrukcja obsługi programu

Logowanie do systemu Faktura elektroniczna

Matematyka dla liceum/funkcja liniowa

Jak usprawnić procesy controllingowe w Firmie? Jak nadać im szerszy kontekst? Nowe zastosowania naszych rozwiązań na przykładach.

2.Prawo zachowania masy

Edycja geometrii w Solid Edge ST

Twierdzenie Bayesa. Indukowane Reguły Decyzyjne Jakub Kuliński Nr albumu: 53623

Ładowanie i reorganizacja

WSTĘP DO PROGRAMOWANIA

Temat: Co to jest optymalizacja? Maksymalizacja objętości naczynia prostopadłościennego za pomocą arkusza kalkulacyjngo.

Komunikacja w sieci Industrial Ethernet z wykorzystaniem Protokołu S7 oraz funkcji PUT/GET

Pracownia internetowa w każdej szkole. Opiekun pracowni internetowej SBS 2003 PING

Spring MVC Andrzej Klusiewicz 1/18

Rozwiązywanie nazw w sieci. Identyfikowanie komputerów w sieci

ANALOGOWE UKŁADY SCALONE

PROJEKT. w sprawie: wyboru Przewodniczącego Nadzwyczajnego Walnego Zgromadzenia Spółki

Ćwiczenie: "Ruch harmoniczny i fale"

Transkrypt:

1 z 12 2013-09-25 22:34 ĄŚŹ, czyli polskie ogonki w Internecie Włodzimierz Gajda Polskie znaki diakrytyczne, nazywane powszechnie ogonkami, powodują liczne kłopoty podczas tworzenia stron WWW. Artykuł wyjaśnia, w jaki sposób pokonać trudności dotyczące poprawnego wyświetlenia ogonków, przetwarzania, w tym zamiany wielkości liter oraz sortowanie napisów, a także umieszczania tekstów w bazie danych i przekazywania napisów pomiędzy różnymi językami programowania. Spis treści 1. Kodowanie polskich znaków 2. Jakiego kodu należy używać? 3. Kodowanie strony WWW 4. Kody iso wyświetlane jako win oraz kody win wyświetlane jako iso 5. Dalsze problemy z ogonkami 6. Konwersje kodów w php 7. Przetwarzanie napisów z ogonkami w PHP 8. Ogonki i baza danych MySQL 9. Biblioteki GD oraz ChartDirector 10. Przekazywanie napisów z ogonkami pomiędzy PHP a JavaScript 11. Podsumowanie 1. Kodowanie polskich znaków Obecnie, w odniesieniu do tekstów w języku polskim, stosowane są cztery rodzaje kodów. Kodami tymi są: windows-1250 iso-8859-2 utf-16 utf-8 Dwa pierwsze kodowania, windows-1250 oraz iso-8859-2, to rozwiązania jednobajtowe. Każda litera jest

2 z 12 2013-09-25 22:34 reprezentowana przez jeden bajt. Na przykład litera A jest reprezentowana (w obydwu kodach) przez bajt o kodzie szesnastkowym 41, zaś litera Ą jako A1 (w kodzie iso-8859-2) oraz jako A5 (w kodzie windows-1250). Kody windows-1250 oraz iso-8859-2 różnią się jedynie literami ąśź oraz ĄŚŹ. Kodowanie utf-16 jest kodowaniem dwubajtowym. Każdemu znakowi odpowiadają dwa bajty. Z racji na liczbę możliwych kombinacji (dwa bajty to 16 bitów, co daje 2 16 = 65 536 kombinacji) podejście takie w znacznym stopniu rozwiązuje problem zbyt małej liczby znaków w tabelce ASCII. Tabelka ASCII jest kodowaniem jednobajtowym zawierającym zaledwie 256 różnych kodów, stąd języki takie jak polski były skazane na przyporządkowanie znaków diakrytycznych do nieużywanych znaków powyżej bajtu o numerze 127. W przypadku kodowania utf-16 problem ten znika: każdy znak jest zapisany na dwóch bajtach i pochodzi ze zbioru 65536 kombinacji. To rozwiązuje nie tylko problemy kodowania polskich znaków diakrytycznych (których jest zaledwie osiemnaście), ale praktycznie umożliwia zakodowanie większości alfabetów etnicznych, jakie są współcześnie używane. Pewnym problemem mogą być języki ideograficzne, na przykład chiński liczący tysiące znaków. Problemy takie ostatecznie rozwiązuje kodowanie czterobajtowe utf-32 (cztery bajty dają 2 32 = 4 miliardy kombinacji). Natomiast kodowanie utf-8, nazywane unikodem ośmiobitowym, stosuje sekwencje od jednego do sześciu bajtów do zapisania pojedynczego znaku. Znakom z tabeli ASCII o kodach od 0 do 127 odpowiadają pojedyncze bajty zgodne z kodami ASCII. Znakom o dalszych kodach w tabelach unikodu odpowiadają ciągi kilkubajtowe powstałe przez przekształcenie unikodu szesnastobitowego. Część znaków ma kody jednobajtowe, a część kilkubajtowe. Dodajmy, że utf-8, utf-16 oraz utf-32 (unikod czterobajtowy, 2 32 daje około czterech miliardów kombinacji, co wystarcza do reprezentowania nie tylko alfabetów etnicznych i ideograficznych, ale także symboli technicznych, matematycznych, muzycznych, itd.) to trzy najpopularniejsze sposoby fizycznego zapisu uniwersalnego zestawu znaków UCS (ang. Universal Character Set). Uniwersalny Zestaw Znaków jest zdefiniowany przez normę ISO 10646 i jest zgodny z unikodem publikowanym przez organizację Unicode. lp. Litera ISO DEC ISO HEX WIN DEC WIN HEX UTF-8 HEX UTF-16 HEX 1. ą 177 b1 185 b9 c485 0105 2. ć 230 e6 230 e6 c487 0107 3. ę 234 ea 234 ea c499 0119 4. ł 179 b3 179 b3 c582 0142 5. ń 241 f1 241 f1 c584 0144 6. ó 243 f3 243 f3 c3b3 00f3 7. ś 182 b6 156 9c c59b 015b

3 z 12 2013-09-25 22:34 8. ź 188 bc 159 9f c5ba 017a 9. ż 191 bf 191 bf c5bc 017c 10. Ą 161 a1 165 a5 c484 0104 11. Ć 198 c6 198 c6 c486 0106 12. Ę 202 ca 202 ca c498 0118 13. Ł 163 a3 163 a3 c581 0141 14. Ń 209 d1 209 d1 c583 0143 15. Ó 211 d3 211 d3 c393 00d3 16. Ś 166 a6 140 8c c59a 015a 17. Ź 172 ac 143 8f c5b9 0179 18. Ż 175 af 175 af c5bb 017b Tabela 1. Kodowanie polskich znaków Tabelki zawarte w ćwiczeniach 2-1, 2-2 oraz 2-3 przedstawiają polskie znaki diakrytyczne we wszystkich czterech kodach. Polskie ogonki znajdziemy na stronach 426 oraz 431 specyfikacji CodeCharts.pdf. 2. Jakiego kodu należy używać? Odpowiedź na to pytanie nie jest wbrew pozorom łatwa i zależy od stosowanego oprogramowania. Polski Komitet Normalizacyjny zatwierdził kodowanie iso-8859-2 jako normę PN-93 T-42118. Zatem o ile to tylko możliwe, należy stosować kodowanie iso-8859-2. Trudności pojawią się wtedy, gdy zechcemy tworzone pliki przetwarzać przy użyciu narzędzi firmy Microsoft. Na przykład otworzenie plików 1-1, 1-2 czy 1-3 z tabeli 1 w Excelu nie da pożądanych wyników (zamiast polskich znaków ujrzymy krzaczki ). Zatem czasami, w odniesieniu do plików przetwarzanych produktami Microsoftu, korzystne jest stosowanie kodowania windows-1250. W pewnych specyficznych sytuacjach nieodzownym staje się stosowanie unikodu, szesnasto- bądź ośmio- bitowego. Przykładami takich sytuacji jest tworzenie witryn zawierających teksty w kilku językach, korzystanie z biblioteki ChartDirector służącej do generowania wykresów czy przekazywanie napisów z języka php do JavaScriptu. W dwóch pierwszych sytuacjach możemy użyć kodowania utf-8, zaś przekazując teksty do JavaScriptu należy posłużyć się zacytowanym (w sensie funkcji escape() znanej z JavaScript) szesnastobitowym unikodem. Podsumowując, możemy podać krótki przepis na wybór kodowania znaków w dokumencie:

4 z 12 2013-09-25 22:34 Jeśli dokument to strona WWW otwierana wyłącznie przeglądarką należy użyć kodowania iso-8859-2. Jeśli dokument nie jest stroną WWW (np. dokument tekstowy) i będzie przetwarzany narzędziami firmy Microsoft to należy stosować kodowanie windows-1250. Jeśli dokument zawiera teksty w kilku językach, to należy użyć kodu utf-8. Jeśli dokument jest tworzony w PHP i stosuje bibliotekę GD, to należy użyć kodowania iso-8859-2. Jeśli dokument jest tworzony w PHP i stosuje bibliotekę ChartDirector, to należy użyć kodowania utf-8, Jeśli dokument jest tworzony w PHP i przekazuje teksty do JavaScript, to należy użyć kodowania utf-16, W przypadku umieszczania napisów w bazie danych należy użyć kodowania stosowanego przez serwer bazy danych. 3. Kodowanie strony WWW W przypadku stron WWW należy pamiętać o tym, że format zapisu dokumentu jest ustalany zarówno przez element meta występujący w nagłówku strony jak i przez faktycznie stosowane kodowanie znaków. Fizyczny zapis pliku musi być zgodny z formatem ustalonym elementem meta. O fizycznym formacie zapisu pliku decyduje stosowany edytor. Część edytorów posiada opcję do konwersji kodowania znaków. Jeśli plik stosuje kodowanie iso-8859-2, wówczas w dokumencie umieszczamy element meta: <meta http-equiv="content-type" content="text/html; charset=iso-8859-2" /> Napisami, które definiują cztery kody wymienione na początku, są: iso-8859-2 windows-1250 utf-8 utf-16 Napisy te mogą być pisane dużymi bądź małymi literami. Na przykład w przypadku korzystania z unikodu ośmiobitowego w dokumencie umieszczamy jeden z poniższych elementów meta: <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> Przykład 3-1 z tabeli 2 przedstawia stronę WWW umożliwiającą zmianę kodowania na dowolny z wymienionych kodów. W zamierzchłych latach dziewięćdziesiątych XX wieku, często stosowanym rozwiązaniem była rezygnacja z ogonków. Skrypt 3-1 umożliwia urwanie ogonków po wybraniu kodowania iso-8859-1. (Oczywiście rezygnacja ze stosowania ogonków wymaga także zmiany polskich znaków diakrytycznych na ich łacińskie odpowiedniki, ą

5 z 12 2013-09-25 22:34 zamieniamy na a, ć na c, itd.). 4. Kody iso wyświetlane jako win oraz kody win wyświetlane jako iso Najczęstszym błędem dotyczącym wyświetlania polskich ogonków na stronach WWW jest zły znacznik meta definiujący kodowanie znaków. Jeśli w dokumencie zapisanym w formacie iso-8859-2 wstawimy element meta ustalający kodowanie windows-1250, to zamiast części polskich ogonków ujrzymy krzaczki. Podobny efekt otrzymamy na przykład po wykonaniu operacji Widok Źródło w przeglądarce Internet Explorer na stronie wykonanej w kodzie iso-8859-2. Błędami, jakie mogą nam się przytrafić są: wyświetlenie strony zakodowanej jako iso z elementem meta ustalającym kodowanie windows, wyświetlenie strony zakodowanej jako windows z elementem meta ustalającym kodowanie iso. Druga z wymienionych sytuacji pojawi się na przykład wtedy, gdy stronę WWW zechcemy utworzyć windowsowym notatnikiem. Dokument tworzony notatnikiem zawiera kodowanie windows-1250, więc dodanie elementu meta z kodowaniem iso da właśnie drugi z wymienionych błędów. (Notatnik w najnowszych systemach Windows umożliwia ustalenie kodowania znaków w zapisywanym dokumencie. Obsługiwanymi formatami są oprócz windows-1250 także utf-8 oraz utf-16). Rysunek 1. Wygląd ogonków przy błędnym elemencie meta

6 z 12 2013-09-25 22:34 Oczywiście błędem jest również użycie w jednym pliku obu kodów na raz. W takiej sytuacji zmiana znacznika meta nie pomoże. Bez względu na to, czy użyjemy elementu meta z kodem iso czy win, część znaków będzie wyglądała niepoprawnie. Pamiętajmy, że kodowania iso-8859-2 oraz windows-1250 różnią się wyłącznie znakami małymi ąśź oraz dużymi ĄŚŹ. Zatem tylko w odniesieniu do tych znaków otrzymamy błędy. Rysunek 1 przedstawia wygląd znaków ąśźąśź w przypadku błędnie ustalonego kodowania. Natomiast przykłady 4-1, 4-2, 4-3, 4-4 oraz 4-5 demonstrują błędnie wykonane strony WWW. 5. Dalsze problemy z ogonkami Pokonanie trudności dotyczących wyświetlania polskich znaków nie stanowi bynajmniej końca walki z ogonkami. Przechodząc do programowania stron WWW w PHP i korzystania z baz danych koniecznym stanie się uwzględnienie ogonków podczas przetwarzania napisów i wykonywania zapytań. Problemami, jakie należy pokonać są: sortowanie, zmiana wielkości znaków oraz pozostałe operacje na napisach w PHP, porządkowanie wyników zapytań SQL klauzulą ORDER BY korzystanie z bibliotek (np. GD, ChartDirector), przekazywanie napisów pomiędzy różnymi językami programowania (np. z PHP do JavaScript i na odwrót). Zanim przejdziemy do podania rozwiązań powyższych problemów, zatrzymajmy się przy konwersji kodowania polskich znaków w języku PHP. 6. Konwersje kodów w php Do obsługi kodowania znaków w języku PHP mamy do dyspozycji funkcje rodziny Multibyte string (funkcje z przedrostkiem mb_, np. mb_detect_encoding()) oraz bibliotekę iconv. Niestety, ani biblioteka iconv ani Multibyte string nie obsługują kodowania windows-1250. Biblioteka pl.inc.php zawarta w przykładzie 7-1 (plik o nazwie pl.inc.php) zawiera zestaw funkcji do konwersji napisów zawierających polskie ogonki, jak również stałe ułatwiające przetwarzanie ogonków. Biblioteka ta opiera swoje działanie na funkcjach strtr(), iconv(), str_replace() oraz na zdefiniowanych stałych i tablicach zawierających kody polskich znaków diakrytycznych. Konwersja napisu zawartego w zmiennej $zm z formatu windows-1250 do iso-8859-2 ma postać: $nowy = pl_iso2win($zm); zaś konwersja w formatu windows-1250 do utf-8: $nowy = pl_win2utf8($zm);

7 z 12 2013-09-25 22:34 z\do iso win utf-8 utf-16 ascii iso pl_iso2win() pl_iso2utf8() pl_iso2utf16() pl_iso2ascii() win pl_win2iso() pl_win2utf8() pl_win2utf16() pl_win2ascii() utf-8 pl_utf82iso() pl_utf82win() pl_utf82utf16() pl_utf82ascii() utf-16 pl_utf162iso() pl_utf162win() pl_utf162utf8() pl_utf162ascii() ascii Tabela 2. Funkcje konwertujące zawarte w bibliotece pl.inc.php Tabela 2 zawiera sumaryczne zestawienie funkcji konwertujących polskie znaki. Natomiast przykłady 5-1, 5-2 oraz 6-1, 6-2 i 6-3 wyjaśniają, w jaki sposób możemy umieścić w napisie polskie znaki korzystając z ich kodów liczbowych. Unikniemy w ten sposób błędów polegających na przekonwertowaniu polskich ogonków w pliku pl.inc.php. Jeśli w pliku biblioteki użyjemy zwykłych napisów postaci: define('pl_iso_all', 'ąćęłńóśźżąćęłńóśźż'); define('pl_win_all', 'ąćęłńóśźżąćęłńóśźż'); wówczas taki plik będzie zawierał polskie znaki zakodowane zarówno jako windows-1250 jak i iso-8859-2. Ponadto zmiana kodowania polskich znaków w pliku pl.inc.php spowoduje błędne działanie funkcji konwertujących. W celu uniknięcia powyższych trudności należy zamiast polskich znaków użyć ich kodów: define('pl_win_all', "\xb9\xe6\xea..."); define('pl_iso_all', "\xb1\xe6\xea..."); (Powyższy przykład został ograniczony do trzech pierwszych znaków ąćę.) 7. Przetwarzanie napisów z ogonkami w PHP Kluczem do rozwiązania problemów z ogonkami w języku PHP jest funkcja setlocale(). Modyfikuje ona działanie części funkcji dotyczących napisów w taki sposób, by poprawnie był obsługiwany podany zestaw znaków. Wywołanie (koniecznie w systemie Windows!): setlocale(lc_all, 'Polish_Poland.1250'); spowoduje, że znaki kodowania windows-1250 będą poprawnie porównywane i przekształcane. Przykładami funkcji, na jakie ma wpływ ustawienie setlocale(), są strcoll(), strtoupper() oraz strtolower().

8 z 12 2013-09-25 22:34 Po ustaleniu kodowania funkcją setlocale() do porównania napisów stosujemy funkcję strcoll(). Poniższy fragment kodu wydrukuje napisy śliwka oraz woda w kolejności alfabetycznej: $zm1 = 'śliwka'; $zm2 = 'woda'; if (strcoll($zm1, $zm2) < 0) { echo $zm1. '<br />'; echo $zm2. '<br />'; } else { echo $zm2. '<br />'; echo $zm1. '<br />'; } Natomiast instrukcja: usort($wyrazy, "strcoll"); posortuje alfabetycznie wyrazy zawarte w tablicy $wyrazy uwzględniając polskie ogonki. Pamiętajmy, że użycie operatora porównania napisów < nie da poprawnych wyników, gdyż kody liter z ogonkami, na przykład ś są większe co do wartości od kodów liter bez ogonków. (Otrzymamy błędnie posortowaną listę wyrazów!) Funkcje strtoupper() oraz strtolower() służą do zmiany wielkości liter w napisie i po wywołaniu funkcji setlocale() działają poprawnie również w odniesieniu do ogonków. Do ustawienia kodowania iso-8859-2 w systemie Windows stosujemy instrukcję: setlocale(lc_all, 'Polish_Poland.28592'); natomiast przestawienie kodowania na iso-8859-2 w systemie unix wykona wywołanie: setlocale(lc_all, 'pl_pl.iso8859-2'); Co ciekawe, koszystając z funkcji setlocale() możemy wpłynąć również na działanie funkcji zawartych w bibliotekach. Przykładem niech będzie biblioteka przetwarzania szablonów Smarty i stosowane przez nią modyfikatory zmiennych. Jeśli w szablonie umieścimy zmienną $slowo przekształconą operatorem upper: {$slowo upper} to otrzymany tekst będzie zawierał błędnie przekonwertowane litery z ogonkami. Po dodaniu w skrypcie php wywołania funkcji setlocale() powyższy modyfikator upper zadziała poprawnie!

9 z 12 2013-09-25 22:34 8. Ogonki i baza danych MySQL Kolejnym problemem jest umieszczanie napisów z ogonkami w bazie danych. Zasadniczym problemem jest nie tyle samo umieszczanie tekstów polskich w bazie danych, ile osiągnięcie poprawnego porządku po dodaniu klauzuli ORDER BY do zapytań. Aby osiągnąć poprawny rezultat musimy umieszczać w bazie danych napisy w takim kodowaniu, jakie jest stosowane przez serwer bazy danych. W przypadku serwera MySQL porządek sortowania napisów ustalamy w konfiguracji serwera. W pliku my.ini umieszczamy wpis: [mysqld] default-character-set=latin2 character-sets-dir="c:/mysql/share/charsets" lub uruchamiając serwer z wiersza poleceń piszemy: C: cd C:\mysql\bin mysqld-nt.exe --standalone --character-sets-dir=c:/mysql/share/charsets --default-character-set=latin2 Po uruchomieniu serwera z domyślnym zestawem znaków iso-8859-2 (nazywanym latin2), serwer będzie poprawnie alfabetycznie sortował słowa z polskimi ogonkami. 9. Biblioteki GD oraz ChartDirector W przypadku bibliotek graficznych kodowanie znaków jest istotne w odniesieniu do napisów umieszczanych na rysunkach. W bibliotece GD należy stosować kodowanie iso-8859-2, natomiast ChartDirector posługuje się ośmiobitowym unikodem utf-8. 10. Przekazywanie napisów z ogonkami pomiędzy PHP a JavaScript Problemem, którego rozwiązanie zajęło mi najwięcej czasu było przekazywanie napisów z ogonkami z PHP do JavaScriptu. Tutaj zadziała wyłącznie unikod szesnastobitowy utf-16, w którym polskie znaki zacytowano zgodnie z działaniem funkcji escape(). Napis żółw zdefiniowany w zmiennej w PHP: $s = "żółw"; przekazujemy do JavaScriptu po przekształceniu funkcjami pl_win_escape_url2escape_javascript() oraz rawurlencode():

10 z 12 2013-09-25 22:34 <script type="text/javascript"> <!-- var <?php $skod = pl_win_escape_url2escape_javascript(rawurlencode($s)); echo "kod = \"$skod\";"; //--> </script> wartość zmiennej kod w języku JavaScript wyniesie: %u017c%u00f3%u0142w Jest to właśnie szesnastobitowy kod utf-16, w którym polskie znaki są reprezentowane przez sekwencje %uxxxx, gdzie XXXX jest kodem znaku w tabeli unikodu. 11. Podsumowanie Spośród wymienionych czterech sposobów kodowania polskich znaków największe wsparcie ma iso-8859-2. Najrozsądniejszym wyborem wydaje się więc stosowanie właśnie tego formatu. W razie konieczności (na przykład stosując bibliotekę ChartDirector) dokonujemy niezbędnych konwersji stosując funkcje str_replace(), strtr() czy wspomnianą bibliotekę pl.inc.php. lp. Przykład 1. Tabela kodów polskich znaków - tworzenie pliku z danymi (iso, win, wersja 1) 2. Tabela kodów polskich znaków - tworzenie pliku z danymi (iso, win, wersja 2) 3. Tabela kodów polskich znaków - tworzenie pliku z danymi (iso, win, utf-8, utf-16) 4. Tabela kodów polskich znaków (iso, win, wersja 1) 5. Tabela kodów polskich znaków (iso, win, wersja 2) 6. Tabela kodów polskich znaków (iso, win, utf-8, utf-16) 7. Strona prezentująca wszystkie kodowania polskich znaków 8. Błędy: iso jako win/win jako iso 9. Błąd: win jako iso 10. Błąd: iso jako win 11. Błąd: oba jako iso

11 z 12 2013-09-25 22:34 12. Błąd: oba jako win 13. Umieszczanie polskich znaków iso w napisie: funkcja chr() 14. Umieszczanie polskich znaków win w napisie: funkcja chr() 15. Umieszczanie polskich znaków iso w napisie: backslash-kod 16. Umieszczanie polskich znaków win w napisie: backslash-kod 17. Umieszczanie polskich znaków utf-8 w napisie: backslash-kod 18. Biblioteka pl.inc.php 19. Funkcja setlocale() (system windows, kodowanie windows) 20. Funkcja setlocale() (system windows, kodowanie iso) 21. Funkcja setlocale() (system unix, kodowanie iso) 22. index.php">funkcja setlocale() oraz modyfikatory Smartiego upper, lower 23. Sortowanie wyników zapytania klauzulą ORDER BY 24. Konfiguracja i uruchamianie serwera MySQL 25. Użycie biblioteki GD 26. Użycie biblioteki ChartDirector 27. Przekazywanie ogonków win z PHP do JavaScript 28. Przekazywanie ogonków iso z PHP do JavaScript 29. Przekazywanie ogonków win z JavaScript do PHP 30. Przekazywanie ogonków iso z JavaScript do PHP 31. Tabelka kodów polskich znaków (win, iso, wersja 1) 32. Tabelka kodów polskich znaków (win, iso, wersja 2) 33. Tabelka kodów polskich znaków (win, iso, utf-8, utf-16) 34. Dane Microsoftu dotyczące funkcji setlocale() Tabela 3. Przykłady do pobrania lp. Adres 1. Polski Komitet Normalizacyjny 2. Strona ogonkowa 3. Unicode 4. Unicode: Języki

12 z 12 2013-09-25 22:34 5. Opis unikodu 6. Kody języków 7. Microsoft: language string 8. Microsoft: language and country/region strings 9. Microsoft: country/region strings 10. Microsoft: internationalization 11. Microsoft: InternetCodepage Property Tabela 4. Adresy Reklama