PHP de Türkçe Karakter Sorunu
15 Mayıs 2011 • ☕️ 2 dk okuma • 🏷 bilgisayar, yazılım
Öncelikle merhaba =) İnternet dünyasında aradığınızda üzerine en çok konuşulmuş, konuşulan konulardan birisidir aslında “Türkçe Karakter Sorunu”. Web yazılımı / tasarımı ile uğraşanlar sık sık ya da genellikle bu sorunla karşılaşmaktadır. Kendi açımdan konuşmam gerekirse ne kadar tecrübem olursa olsun, ne kadar çok bu sorun üzerine çözümüm olursa olsun yine de projelerin belirli sürelerini Türkçe Karakterlerle uğraşmaya ayırıyorum.
Üzerinde çalıştığım en son projem de başıma gelenlerin hala cevabını bulamadım. Bir çözüm geliştirdim ama aklımda müthiş bir soru işareti olarak kaldı yaşadıklarım. Kısaca açıklamam gerekirse, projemin veri tabanı ile bağlantılı (ki hepsi bağlantılıydı, index hariç) sayfalarında charsetimi utf8 olarak tanımladım.
HTML; charset=utf-8" />
Veri tabanımın ve toblolarımın karakter karşılaştırma tiplerini de utf8turkishci olarak ayarladım. Yönetici panelim dahil hiçbir sayfa da türkçe karakter sorunum olmadı fakat index.php sayfam da ilginç bir şeyler yaşanmaya başlandı. İçeriği, menuleri vb. include ettiğim sayfamda türkçe karakterler ama hepsi değil sadece ş ve ğ sorun çıkartıyordu.
İlk olarak sayfa charsetini ISO ya çevirdim ve veri tabanımın karşılaştırma tiplerini latin5turkishci yaptım.
HTML; charset=ISO-8859-9" />
Fakat sorun yine aynı kaldı. index.php sorunluydu. Ardından veri tabanı bağlantımdan sonra karakter tipim ile ilgili sorgular döndürerek karakter tipimi sağlam bir şekilde tanımlamak istedim.
mysql_select_db("veritabanı_adı");
mysql_query("SET NAMES ´latin5´");
mysql_query("SET CHARACTER SET latin5");
Fakat sonuç tekrardan hüsran ile bitti. index.php sorunlu çalışmaya devam etti. Uygulumalaya çalıştığım ilk çözümlerin ardından 3 güne yakın bu sorun ile uğraştım ve merakımın giderek artmasına rağmen çözüm aramayı bıraktım ve gözünü sevdiğim html kodları ile (türkçe karakterlerin html kodları) sorunu hallettim.
Öncelikle PHP de bir fonksiyon yazdım.
function tr($yazi) {
$yazi = trim($yazi);
$ara = array('Ç','ç','Ğ','ğ','ı','İ','Ö','ö','Ş','ş','Ü','ü');
$degistir = array('Ç','ç','Ğ','ğ','ı','İ','Ö','ö','Ş','ş','Ü','ü');
$yeni_yazi = str_replace($ara,$degistir,$yazi);
return $yeni_yazi;
}
Bu fonksiyonun ne işe yaradığı zaten ortada ama kısaca türkçe karakterleri verilen string bloğu içerisinden bulup html kodlarıyla değiştiriyor. Bu fonksiyonu yazdıktan sonra veri tabanına kayıt aşamasında verilerimi bu fonksiyonumun süzgecinden geçirerek kayıt ettim ve hiç bir sorun olmadan index.php sayfamda türkçe karakterleri kullanabildim. Hala index.php üzeinde oluşan ilk sorunun nedenini merak etmekteyim ve umarım çalışmalarım sonucunda sorunu çözerim =)