27 Kasım 2010 Cumartesi

PHP & MySql de Türkçe Karakter Sorunu

Eminim her MySql - PHP kullanıcısının başına gelen olağan bir sorundur, Türkçe karakter problemi... Doğrusu, beni de bir kaç gün uğraştırdı. Ama nihayetinde kesin çözümü buldum. Şimdi yapmanız gerekenleri adım adım aşağıda sıralayacağım.


1) Veri-tabanınızı oluştururken karşılaştırma/condition değerini "utf8_turkish_ci" yapmalısınız. Tablolara bi karşılaştırma değeri vermenize gerek yok ama verecekseniz yine "utf8_turkish_ci" değerini verin.

2) Web sayfanızdan veritabanına bağlantı yaptığınız kısımda, veritabanına bağlanıp, seçim yaptıktan sonra ki kısma aşağıdaki kodu yazın.


mb_internal_encoding('UTF-8');
mysql_query('SET NAMES UTF8');
mysql_query("SET CHARACTER SET UTF8");
mysql_query("SET COLLATION_CONNECTION = 'utf8_turkish_ci'");
mysql_query("SET character_set_connection = 'UTF8'");
mysql_query("SET character_set_client = 'UTF8'");
mysql_query("SET character_set_results = 'UTF8'");





(localhost 'a bağlanıp mysql_select_db(''veritabani') dedikten sonra yukarıdaki kodu yapıştırın...onun da altından SQL sorgularınızı oluşturabilirsiniz.)  
3) Son olarak da php.ini dosyasını açın "default_charset" değerini "windows-1254" ye ayarlayın.
default_charset = "windows-1254" şeklinde olması lazım.
Database inize baktığınızda göreceğiniz bol ö lü bol ş li bol ç li ve bol ğ li bir veri tabanı olacaktır. :)
NOT: Bununla beraber tüm dosyalarınızın kayıt formatını "UTF-8" yapmayı unutmayın...
NOT2: Eğer tüm bunları yaptığınız halde yine düzelmezse, geriye son ve kesin çare kalıyor...str_replace() fonksiyonu; bunun için aşağıdaki kodu kullanabilirsiniz:

//karakter düzeltme scripti
function degistir($veri){
$veri = str_replace("%C7", "Ç", $veri);
$veri = str_replace("%E7", "ç", $veri);
$veri = str_replace("%u0130", "İ", $veri);
$veri = str_replace("ı", "ı", $veri);
$veri = str_replace("ğ", "ğ", $veri);
$veri = str_replace("Ğ", "Ğ", $veri);
$veri = str_replace("ş", "ş", $veri);
$veri = str_replace("Ş", "Ş", $veri);
$veri = str_replace("%F6", "ö", $veri);
$veri = str_replace("D6", "Ö", $veri);
$veri = str_replace("%FC", "ü", $veri);
$veri = str_replace("%DC", "Ü", $veri);
$veri = str_replace("%20", " ", $veri);
$veri = str_replace("%2C", ",", $veri);
$veri = str_replace("%3B", ";", $veri);
$veri = str_replace("%3A", ":", $veri);
$veri = str_replace("%26", "&", $veri);
$veri = str_replace("%28", "(", $veri);
$veri = str_replace("%29", ")", $veri);
$veri = str_replace("%22", "\"", $veri);
$veri = str_replace("%27", "'", $veri);
$veri = str_replace("%5C", "\\", $veri);
$veri = str_replace("%3D", "=", $veri);
return $veri;
}
//script sonu