Magyar ékezetek: öüóőúéáűí ÖÜÓŐÚÉÁŰÍ
osCommerce utf8 és latin karakter készlet kompatibilitás
avagy miért látunk "?" magyar ékezetet
Tárolónkból szeptember óta elérhetőek honosított osC verziók és GYIK-ból a telepítési útmutató. Eddig osC3 áruházunkban Latin_swedish_ci karakteregyeztetéssel hoztuk létre adatbázisunkat. Alapvető oka az osC2 honosított verziójával való kompatibilitás biztosítása (karakteregyeztetés) volt. Mára bebizonyosodott , hogy a későbbi frissítési szempontot nem érdemes figyelembe vennünk, mert számtalan hibába ütközünk. Elméletben és gyakorlatilag is Latin1 táblán ábrázolható egy utf8 karakter, csak ebben az esetben hexa kódolásról beszélünk. Így nem valós utf8 karaktereket, hanem egy karakter hexa kódsorát tároljuk, amikor a Latin1 táblában nem szereplő karaktert kívánunk ábrázolni.
Kitüntetet magyar karaktereink -öüóőúéáűí ÖÜÓŐÚÉÁŰÍ- az ékezetesek, amik nem szerepelnek Latin1 alap táblán. Utf8 hexa ábrázolásuk az alábbi listán olvasható.
-- ö = ö
-- ü = ü
-- ó = ó
-- Å‘ = ő
-- ú = ú
-- é = é
-- á = á
-- ű = ű
-- Ã = í
-- Ö = Ö
-- Ü = Ü
-- Ó = Ó
-- Å = Ő
-- Ú = Ú
-- É = É
-- Ã = Á
-- Ű = Ű
-- Ã = Í
Az első komolyabb hiba az osC3 XHTML validálásában jelentkezik. Az alkalmazott karaktereink nem UTF8 szabványosak.
Karakteregyeztetés és az osCommerce
Gyakori téma és egyben probléma, milyen karakteregyeztetést használjunk, és hogyan jelenítsük meg ékezeteinket? Az osC2 verziójában Latin_swedish_ci karaktertáblát és egyeztetést (COLLATE) alkalmazva megoldható volt a kívánatos betűkészletünk megjelenítése. Annak ellenére ezt használjuk, hogy létezik Latin2 karakterkészlet, ami képes a magyar karaktereket kezelni. Mi az oka?
Az oscommerce áruház alapesetben Latin1 nyelvterületre lett kifejlesztve, ami eléggé behatárolta használatát. Eddig nem merült fel tömegesen az latin2 és az utf8 karakter szabványok iránti igény, mert a honi áruházak zömében jól elboldogulhattunk a svéd kiterjesztésű karaktertáblán, ahol létezik az őŐűŰ is. Ám itt az idő és támad az osC3. Be kell látnunk, hogy ezt a kényelmes álláspontot fel kell adnunk. Továbbá a MYSQL és a mysqli adatkezelés alapértelmezetten Latin1 kódtáblát használ, aminek befolyásolása külön utasításokat igényel.
Az oscommerce 2 változataiban használhatunk Latin2 karaktertáblát is, ha átírjuk a telepítés és az adatbázis kezelés funkcióit Latin2 egyeztetésre, különben "?" karakterhibáink lesznek. Megtehetjük ezt utf8-ra is. Utóbbi esetben azonban jóval több dolgot kell még megváltoztatni, mivel az áruház HTML oldalait 8859-2 charset értéken jelenítjük meg és nyelvi fájljaink is csak ansi kódolásúak.
MYSQL példa:
mysql_query("SET NAMES 'utf8'"); //Mezőnevek definíciója
mysql_query("SET CHARACTER SET 'utf8'"); //Rekord tartalom karakterkészlete
mysql_query("SET COLLATION_CONNECTION='utf8_unicode_ci'"); //Az adatbázis kapcsolat egyeztetése
A jövőt szemlélve két járható út adódik az osC3 verzióra való átállásához és a kereskedelmi piacok kiterjesztéséhez
- Meglévő 2-es áruházunkat utf8 adatbázis alapra helyezzük
- Maradunk az áttérésig korlátozott Latin táblán, és a teljes adatbázisunkat az áttéréskor konvertáljuk utf8-ra
Latin 2 és a 8859-2
Az EU csatlakozással a 8859-2 értelmét veszti, mivel helyébe részben a 8859-16 lépett az euró (€) jellel. Jelenleg EUR feliratot használunk, ami nem a tökéletes megoldás. Tekintettel a fenti lényeges hibára itt is a 2-es tábla helyett a 16-ost illene használni.
Lehetséges problémák és megoldásuk
Adategyeztetés
Áruház verzióink teljesen más adatbázis kezelő osztályt alkalmaznak. A 2-es rendszerek MYSQL-t, mígy a 3-as verzió a mysqli (továbbfejelsztett) lekérdező nyelvet. Az SQL osztály alapbeállítás szerint Latin1 egyeztetéssel működik.
Ha az osC3-as verziójában is szeretnénk a teljes UTF8 kompatibilitást biztosítani (Validálás), akkor a webáruházat az alapértelmezett Latin1 kódolásról át kell "kapcsolni" utf8-ra egy új sor beillesztésével.
@mysqli_set_charset($this->link, 'utf8');
Ebben az esetben használhatunk pl: utf8_general_ci karaktertábla egyeztetést adatbázisunknál. Az átkapcsolást javasolt telepítés előtt elvégezni, vagy a már meglévő áruházunk adatbázis átkódolását is végre kell hajtani.
Tekintettel arra, hogy hamarosan új verziók megjelenésére számítunk az utf8 átállítást külön csomagokban lenne célszerű létrehozni, ami lehetőséget teremt a már meglévő és a teljesen új áruházak utf8 kompatibilitásának biztosítására.
Véleményem szerint a fentiekből kiindulva más tartalom kezelő rendszer (pl: Joomla) és az osCommerce webáruház egymásba integrálása komolyan addig nem kivitelezhető, amíg a karakterkódolási és html megjelenítési probléma nem kerül kiküszöbölésre. Ismereteim szerint jelenleg csak az osC3 és a CMS made simple házasítás kecsegtet sikerrel.
HTML kódolások az adatbázisban
Lényeges hiba, hogy olyan HTML szerkesztőt használunk webáruház termékleírási oldalainak illetve egyéb tartalom szerkesztőjének, ami nem natívan, hanem kódolva tároltatja a magyar ékezeteket. Hátránya, hogy az áruház keresőjében elvesznek karaktereink, ami a magyar nyelv számára végzetes. Egyszerűen nem talál ékezetes szavakat az áruházi kereső. A Latin táblákon egyébként sem tárolható idegen nyelvi karakter csak kódolva. A jövőre nézve javasolt, hogy ezektől haladéktalanul szabaduljunk meg és mielőbb használjuk végre tiszta szabványt.
Levélküldés
Szabványos ingyenes online levelező rendszereink (pl: freemail, citrommail) elterjedése és az a tény, hogy egy átlagos vásárló nem használ offline (telepített levelező rendszert pl:outlook, thunderbird stb.) megköveteli, hogy az áruház által kiküldött utf8 levelek tárgya, címzetje és tartalma kódolva érkezzen a címzetthez, mert az nem lesz olvasható. Az osC3-as rendszere szerencsére képessé vált a "multilangism" - többnyelvűsítés bővítmények beépítésével, míg a honosított osCommerce 2 erre még nem képes.
Nyelvi problémák
Amennyiben alacsony szintű (Latin) kódtáblákat használunk, az adategyeztetések miatt nem házasíthatunk egymástól távoli nyelveket áruházunkban. Például nem tudunk betörni az orosz piacra 8859-2 kódtáblával, csak utf8-cal vagy önálló áruházzal, ami Latin-5 vagy 8859-5 kódtáblát használ. Utóbbi esetben a magyar piacot rekesztjük ki. A latin táblás megoldások körülményesek és erőssen korlátozottak.
Röviden összefoglalva, tehát a jövő: utf8.
A 2-es UTF8 csomag elérhető: itt
-
Sokat olvastam arról hogy is lehet megoldani a tökéletes keresési eredményeket magyar (vagy akár más speciális ékezetes karaktereket tartalmazó) nyelven. Ennek kulcsa az utf8_bin bináris karakteregyeztetés. Erről szól egy kiváló blogbejegyzés az alábbi címen, minden ezen téma iránt érdeklődőnek ajánlom! itt található: http://nullstring.blog.hu/2008/02/20/kereses_mysql_ad atbazisban_ekezetek_es_html_tag_ek_mint_zavaro_tenyezok
Az itt leírtakat alkalmazva csináltam egy szótárprogramot, mely most az egyik munkámhoz kell. A szótár Román-Magyar vegyes szótár, és Ajax alapú. Bár nem szántam publikusnak, kiválóan lehet ellenőrizni rajta, hogy mennyire pontosan lehet keresni az ékezetes karaktereket is! Bártan ajánlom a kipróbálását mindenkinek. A módszer szerintem az OSC3-ban is implementálható lenne sikerrel.
-
Az előző hozzászólásból figyelmetlenségből kihagytam a szótárra mutató linket, ahopl ellenőrizhatő a kereső működése:
http://www.digitx.hu/dicfor/dicfor.php
-
2010-05-06 06:51:21 |Administrator| tgely - re: Ékezetes karakterek keresése magyar nyelven.Xmen írta:Sokat olvastam arról hogy is lehet megoldani a tökéletes keresési eredményeket magyar (vagy akár más speciális ékezetes karaktereket tartalmazó) nyelven. Ennek kulcsa az utf8_bin bináris karakteregyeztetés. Erről szól egy kiváló blogbejegyzés az alábbi címen, minden ezen téma iránt érdeklődőnek ajánlom! itt található: http://nullstring.blog.hu/2008/02/20/kereses_mysql_adatbazisban_ekezetek_es_html_tag_ek_mint_zavaro_tenyezok
Az itt leírtakat alkalmazva csináltam egy szótárprogramot, mely most az egyik munkámhoz kell. A szótár Román-Magyar vegyes szótár, és Ajax alapú. Bár nem szántam publikusnak, kiválóan lehet ellenőrizni rajta, hogy mennyire pontosan lehet keresni az ékezetes karaktereket is! Bártan ajánlom a kipróbálását mindenkinek. A módszer szerintem az OSC3-ban is implementálható lenne sikerrel.
Köszönjük az információt. Alkalomadtán megpróbálom beépíteni az osC3 fordításba és a simple Content Manager bővítménybe is. Szerintem az osC2-es rendszerben ...
Módosítás: ( 2010. március 09. kedd, 15:51 )



Megjegyzések:
- Néhol szükséges lehet mb_string (multibyte karakterkezelés) beépítése.
- A SuperTracker megjavult tőle :-)
- Az áruházi kereső SQL LIKE opciója miatt a magyar karakterek {öőóo=o}; {á=a}; {é=e}; {uúüű=u}; {í=i} módon helyettesítődnek. Pl: bőr keresése minden olyan szót listáz, amiben megtalálható "bőr" vagy "bor" vagy "bór" karakterkapcsolat. Ez nem utf-8 hiba, hanem "LIKE" sajátosság örüljünk, hogy még több találatba botlik a kereső személy
A telepítési leírásból hiányzik a modulok átkonvertálása. A catalog mappában viszont benne vannak.