Unicode használata (PHP, MySQL, PostgreSQL)
A ma reggel említett cikkben Joel arról ír, hogy meg van lepődve a PHP Unicode támogatásának hiányán. Valójában a PHP éppen úgy nem foglalkozik a karakterek repreneztációjához használt kódolással, mint a MySQL 4.0.x és korábbi verziói. Nézzük csak hogy mit is jelent ez közelebbről.
A PHP nem törődik azzal, hogy milyen kódolásban van egy karaktersorozat, a beadott karaktereket azok eredeti formájában őrzi meg. Ez azt jelenti, hogy képes a unicode kódolással készült karaktersorozatok alapvető kezelésére. Részkaraktersorozat pozíciójának keresése például azonban problémát okozhat magyar ékezetes karakterek esetén, hiszen egy ékezetes unicode karakter nem egy bájtot foglal. Ugyanígy lehetetlenek a kis- és nagybetűkre nem érzékeny összehasonlítások.
John Lim adott néhány tippet a unicode használatát illetően. Az egyik ezzel foglalkozó oldalon azt javasolja a szerző (Scott Reynen), hogy egész számok tömbjeként kezeljük a karaktersorozatot, és specifikus karaktersorozat függvényeket fejlesszünk, melyek ezt a reprezntációt támogatják. Mint említettem erre csak akkor van szükségünk, ha a nem egy bájton ábrázolt karakterekkel végzendő műveletekre is szükségünk van. Ez egy eléggé ronda megkerülése a unicode támogatás hiányának, azzal a vitathatatlan előnnyel azonban rendelkezik, hogy minden PHP verzióval működik, és nem igényel semmilyen speciális kiterjesztést.
Ennél sokkal jobban használható azonban a PHP mbstring kiterjesztése, mely a szokásosan használt PHP függvényekhez biztosít cserefüggvényeket, melyek rengeteg kódolást képesek kezelni, többek között unicode kódolásokat is. Ami még ennél is sokkal jobb (lesz), az a készülő PHP i18n (internationalizaton - nemzetköziesítés) kiterjesztés, mely a helyi dátum formátumoktól kezdve az időzónákon keresztül a unicode karaktersorozatokig sokmindenre támogatást nyújt objektum-orientált felületen. Ez a kiterjesztés csak PHP 5-el működik együtt, és az iconv könyvtárat is igényli.
A MySQL hasonló cipőben jár. Tárolhatunk benne unicode kódolást használó adatot, de a karaktersorozatok sorrendezése és a kis- és nagybetűkre nem érzékeny keresések nem fognak működni. A jelenleg alfa állapotban lévő 4.1-es verzóban vezetik be a teljes utf-8 kompatibilitást, mely új lehetőségeket nyit a kódlapok és sorrendezések használatában. A MySQL karaktertábla kompatibilitásáról bővebbet a dokumentációjában olvashatunk.
A PostgreSQL a 7.3-as verziótól kezdve alapértelmezett támogatással érkezik több-bájtot használó kódolások számára. Így unicode karaktersorozatok kezelése sem okozhat problémát.
■ A PHP nem törődik azzal, hogy milyen kódolásban van egy karaktersorozat, a beadott karaktereket azok eredeti formájában őrzi meg. Ez azt jelenti, hogy képes a unicode kódolással készült karaktersorozatok alapvető kezelésére. Részkaraktersorozat pozíciójának keresése például azonban problémát okozhat magyar ékezetes karakterek esetén, hiszen egy ékezetes unicode karakter nem egy bájtot foglal. Ugyanígy lehetetlenek a kis- és nagybetűkre nem érzékeny összehasonlítások.
John Lim adott néhány tippet a unicode használatát illetően. Az egyik ezzel foglalkozó oldalon azt javasolja a szerző (Scott Reynen), hogy egész számok tömbjeként kezeljük a karaktersorozatot, és specifikus karaktersorozat függvényeket fejlesszünk, melyek ezt a reprezntációt támogatják. Mint említettem erre csak akkor van szükségünk, ha a nem egy bájton ábrázolt karakterekkel végzendő műveletekre is szükségünk van. Ez egy eléggé ronda megkerülése a unicode támogatás hiányának, azzal a vitathatatlan előnnyel azonban rendelkezik, hogy minden PHP verzióval működik, és nem igényel semmilyen speciális kiterjesztést.
Ennél sokkal jobban használható azonban a PHP mbstring kiterjesztése, mely a szokásosan használt PHP függvényekhez biztosít cserefüggvényeket, melyek rengeteg kódolást képesek kezelni, többek között unicode kódolásokat is. Ami még ennél is sokkal jobb (lesz), az a készülő PHP i18n (internationalizaton - nemzetköziesítés) kiterjesztés, mely a helyi dátum formátumoktól kezdve az időzónákon keresztül a unicode karaktersorozatokig sokmindenre támogatást nyújt objektum-orientált felületen. Ez a kiterjesztés csak PHP 5-el működik együtt, és az iconv könyvtárat is igényli.
A MySQL hasonló cipőben jár. Tárolhatunk benne unicode kódolást használó adatot, de a karaktersorozatok sorrendezése és a kis- és nagybetűkre nem érzékeny keresések nem fognak működni. A jelenleg alfa állapotban lévő 4.1-es verzóban vezetik be a teljes utf-8 kompatibilitást, mely új lehetőségeket nyit a kódlapok és sorrendezések használatában. A MySQL karaktertábla kompatibilitásáról bővebbet a dokumentációjában olvashatunk.
A PostgreSQL a 7.3-as verziótól kezdve alapértelmezett támogatással érkezik több-bájtot használó kódolások számára. Így unicode karaktersorozatok kezelése sem okozhat problémát.