UTF-8 karakterek kezelése php-val
Az alakulóban lévő keretrendszerem Grid része tud olyat, hogy az adott oszlop celláinka tartalmát megadott karakterhossznál vágja, hogy a táblázat ne csúszkáljon szana-széjjel hosszabb tartalom esetén. A teljes szöveg pedig megjelenik tooltipben. Egyszer csak azt vettem észre, hogy lapozásnál nem jelenik meg semmilyen tartalom.
Lapozásnál a szerverhez fordulunk és kérjük a következő adag adatot. A generált táblázattörzs JSON -ön keresztül jön át a böngészőnek, de a JSON-re kódolást a php végzi el a Zend_Json::encode() metódussal. A hiba pontosan ebben a kódolásban volt. Egyszerűen csak "null" értékkel tért vissza a Zend_Json::encode() metódus. Az igazán furcsa az volt, hogy más helyeken használva tökéletesen működik a kód.
Elsőként kaptam egy olyan javaslatot, hogy toljam át a generált tartalmat a htmlentities() metóduson, hogy a speciális karakterek (pl.Euro) megkapják a html megfelelőjüket és ezzel már meg fog birkózni a php. Ez nem ment.
Mivel az adatok egy része adatbázisból származik meg kellett adnom, hogy milyen a karakter kódolása az adatbázis kapcsolatnak. Ezt a paraméterét a Zend_Db osztálynak még nem használtam. Itt is volt az ideje, hogy megtanuljam. Bővebb információ erről, itt.
Olvasgattam, kereségéltem és azt vettem észre, hogy nem csak én vagyok az egyetlen, aki ezzel küzd. Az első találatok között találtam rá a php multibyte karaktereket kezelő csomagjára, mert eddig nem tudtam arról, hogy van ilyen. :) Találtam még egy wiki oldalt is, ami a témával foglalkozik illetve az O'Reilly oldalán egy apró bejegyzést.
A megoldás végül az lett, hogy meg kellett adnom mb_internal_encoding("UTF-8") -t, majd a karakterek darabolását az mb_strcut() függvénnyel csinálom.
Ennek az apró kis szívással már látom, hogy lesz még dolgom a keretrendszeremmel, mert ez az UTF-X dolog tartogat még nekem meglepetéseket. :)






