Nincs g33k kategória, de ez oda való vóna :)
Szal a probléma az, hogy.. alapvetően nagyn összetett, bonyolult és sokrétű dolog ez az egyszerűségnet tetsző "ő" betű.
Nyitok egy Notepadot és beleírom hogy ő elmentem és örvendek, hogy akkor most van egy szép kerek valamim rajta egy hosszú dupla ékezettel (vagy ez dupla-hosszúékezet?). Elküldöm Hang-Kwoui-Kwang-King-be és megnyitja Po, majd azt mondja Fákk! Mert ő csak egy ?-et [kérdőjel, tudod] fog látni.
Ugyan is nem tudhatja az ő olvasó programja, hogy a minimum 1 bájton kódolt ő-t kellene kiolvasnia abból az 1 bájtból, amit lát a fájlban.
Kipróbáltam, beírom, hogy ő és hexában nézve F5 .. azaz 15*16+5 = 245 -> 11110101
Tehát a magyar windóz egy olyan kódtáblát használ, ami a felső 128 lehetőségen a magyar nyelv betűit is megjeleníti. Ez elég zavarosnak hathat, de mindössze arról van szó, hogy az
ASCII tábla igazából csak 128 karaktert tartalmaz, hiszen ennyi is elég volt annó, meg különben is.. ez elfér 7 biten, és így a 8.-ikkal egész jól elrakoncátlankodtak az 1970-es években. Aztán jöttek a különböző nyelvek ugye.. magyaroknál minden féle kacifántos bötő, ékezettel.. juj! És persze ha már kódoljuk az é-t mért ne kódolnánk a franciáknak a vissza fele dőlő ékezetű é-t, meg a német umlautot.. és hoppsz, hát nem kifutottunk a 8 bitből, azaz 1 bájtból, azaz 255-256 lehetőségből? De, csúnyán, mert pl. a ferdeszeműeknek legalább ~1000 írásjelük van, dialektusonként, huh.
Szóval minden kis és nagy ország legyártotta a saját kódlapjait. Régebbi motorosoknak ismerős lehet még a DOS-os időkből a config.sys-be irandó sor:
COUNTRY=358,437 C:DOSCOUNTRY.SYS
Ez nem csinlát semmit, csak betöltött valami féle kódlapokat, és így már bizonyos bájtokat á-nak meg é-nek értelmezett a gép.
Aztán jött ugye az Internet meg izé, és küldték a pornót Görögországból Franciaországba, és vakargatták a fejüket, meg mást is. Mert ugye az oké, hogy én megtanulhatok több nyelvet is, de a gépbe csak 1 féle kódlapot lehetett betöltetni, legalábbis kezdetben. Illetve macerás volt mindig a görög levélhez görög kódlapot keresni, a franciához meg franciát.
Ugyan voltak olyanok, mint pl. az ISO-8859-1, -2 -3 .. stb. (amit még most is nagyon sok helyen használnak, amik egész jók voltak több féle ábécé reprezentálásához is.)
Akkor jött a megoldás, kódoljunk 2 vagy több bájton. Azon már elfér minden, nem kell több kódlap, elég egy hatalmas. Hurrá. Erre megint megőrültek/megörültek és legyártottak hirtelen hetven féle multibájtos kódlapot. UCS-1, UCS-2 , UTF-7, UTF-8, UTF-16 .. stb :)
Persze ez ebben a formában nem igaz, mert ez több féle szabvány, meg izé.. de a lényeg az, hogy nincs 1 féle über-allesz kódlap, tehát megy a szarkevetés.
És akkor nézzük hogy is megy ez ma.
Szal beírom hogy ő.. ez a Windows 1250-es kódtábla szerint ő. A többi szerint kalapos õ , ami csúnya, mint az köztudott.
Tehát van egy sztringem (igen, az ő is az, még akkor is, ha elég lenne egy char is :)) és ezt egy fájlban tárolom, ami még egy kis PHP kódot is tartalmaz. Mondjuk olyat, ami kapcsolódik egy mySQL szerverhez, amin be van állítva egy COLLATION nevű dolog. Ez egy ilyen mindenre vonatkozó kódolás. Tehát a mySQL megpróbál a COLLATION szerinti kódtáblával boldogulni.
A PHP kapcsolódik, a mySQL leadja neki a titkos pacsit, a PHP egyből tudja, hogy neki akkor most UTF-8 szerint kell beszélnie, mert az adatbázis szerver csak ezt érti meg. Tök jó, de akkor mi legyen a stringünkkel, ami Windóz 1250-ben van alapból, átteszi-e UTF-8-ba? Jó kérdés. A válasz nem tudom. De kis kisérletezgetés után úgy látom, hogy nem igazán. Tárolja bájtonként és kész. Visszadja szépen a PHP-nek, ha lekérdezem, aztán majd a PHP eldönti, hogy akkor mit is kapott vissza.
Na igen, de mit tesznek a dél-koreai buzi pornó gyüjtők? Hogy cserélnek DVD-ket, ha nem tudják leírni a betűiket? Mert ott nincs mese, minimum 2 bájtra van szükség a teljes ABCjük megjelenítéséhez. Nosza, konvertáljunk mondjuk UTF-8-ba. Tároljuk és kérjük vissza.
Van egy olyan PHP kiterjesztés (extension), hogy multibyte. mb_akármi() függvényekkel. Van olyan, hogy
$s = mb_convert_encoding($s,"UTF-8" ,'Windows-1250');
ezt beírom és sírni fog. Meg én is, mert nincs olyan, hogy Windows-1250, csak 51 és 52 :C Akkor ha kiszipogtuk magunkat, gondolkozzunk. Kiderül a Wikipedia-ról, hogy a Windows-1250 és az ISO-8859-2 ugyan úgy kódolja a magyar karaktereket.
Akkor
$s = mb_convert_encoding($s,"UTF-8" ,'ISO-8859-2');
és e' ö-öm e' bódottá' !!!44 :)
betoljuk a mySQL-be, kíváncsibbaknak:
mysql_query("INSERT INTO a SET aa= ' " . $s . " ' ");
aztán.. hm. Nézzük meg mi lett belőle.
Hát nem szép: őáűűéűé , eléggé krix-krax beütése van. Pedig ez UTF-8, mert lekérdezve rendes HTML fejléccel, stb-vel kiküldve Firefox alatt nagyon szépen megjelenik.
Most biztos lehetne játszani a mySQL minden féle lekérdezés modosítójával, de nem akarok. Mert rájöttem, hogy ez nagyon jól működik, egyetlen esetet kivéve, akkor amikor exportálni akarom az adatbázist. Mert akkor jön a krixkrax. És az nem jó, nagyon nem.
Szóval játszunk majd a mySQL-el legközelebb.