2017-08-20
Oet szeep szuez laany oeruelt iiroot nyuuz!2007-12-21
A kegyes hazugságokkal el lehet navigálni egy darabig, de előbb-utóbb eljön az igazság pillanata. Volt idő, amikor a magyar ékezetek helyett megjelenő firkák büszkén utaltak a modern időkre. "Ez már számítógéppel készült. Így vagy úgy, de számítógéppel!"
Szerencsére ahogy bővülnek a lehetőségek, úgy nőnek az igények is. Még mindig nem működik magától értetődően és egyszerűen minden, de már nem vagyunk teljesen esélytelenek.

Kezdhetnénk magával a problémák leírásával, de fontosságához képest meglepően kevés információt találunk az Interneten. Az UHU-Linux 2.0-ás változatának megjelenésekor viszont a dokumentáció tartalmazott egy kifogástalan összefoglalást. Úgy gondolom, hogy aki elektronikus levelezés közben már találkozott problémával (és ki nem) - annak mindenképpen kötelező olvasmány. (Mivel nem könnyű megtalálni, itt az egészet közreadom én is.

A szerző nevét nem találom, sajnos nem tudtam engedélyt kérni, de a formai megoldások arra utalnak, hogy változatlan terjesztése nem ütközik szerzői jogba. Aki mást tud, kérem szóljon!

Ékezetes betűk: Latin-2 kontra UTF-8

A leírtakhoz viszont van egy két kiegészítésem!

Az egy dolog, hogy a linux saját magán belül konzisztensen utf-8 kódkiosztást használ, az pedig egy másik, hogy a mysql adatbázisban tárolt tartalom is az, ráadásul egy harmadik, hogy ezt az adatbázis szerver is tudomásul vegye, és a sorbarendezett kimenetet is eszerint produkálja. (És ezek után már csak a böngésző szelíd rábeszélése van hátra!)

1. Ha az adatbázis iso8859-2, akkor az viszonylag egyszerű, mert a kimentett sql-fájlon elvégezhető a következő átalakítás.

iconv -f "iso8859-2" -t "utf-8" iso.sql > utf.sql

(Előfordulhat, hogy az egyes táblák fejlécében látható "latin2" megjegyzéseket le kell cserélnünk.)

Érdekes problémát okoz, ha egy adatbázisban utf-8 adatok vannak, de erről a szerver nem tud. Ilyenkor a dump kimenetén az duplabájtos karaktereket felbontja, És akkor az így néz ki valahogy: "rendszer- ĂŠs hĂĄzigazda"!
Ilyenkor érdemes fordítva, utf-8 ból először vissza latin2-re, aztán újra utf8-ba konvertálni.
Ha a dump megfelelő formátumú, akkor a következő lépéseket érdemes megtenni:

mysql parancssorban:

drop database eredetidb;
create database eredetidb default charset 'utf8' default collate 'utf8_hungarian_ci';

Majd a parancssorból kilépve:

mysql -u loginname -ppasswd adatbázis --default-character-set=utf8 < valóbanutf8.sql [ENTER]

Ha ebből php állítja elő a weboldalt, még mindig nem lesz jó, hiába cseréled le a header-ben a meta-tag-et:
( <META http-equiv=Content-Type content="text/html; charset=utf-8"> )
Tehát a php-ban azt a pontot kell megkeresni, ahol az a mysql-szerverre csatlakozik, körülbelül így:
$dbconnect = mysql_connect($host,$db_user,$db_pass);
if ( ! $dbconnect ) die ( "Nem lehet csatlakozni a kiszolgalohoz" );
mysql_select_db( $dbase ) or die ( "Nem lehet megnyitni az adatbazist" );
Közvetlenül ezután írandó:

mysql_query("SET NAMES 'utf8';");

Körülbelül ennyi!

status