Kod Dostu

Kod Dostu

PHP de Türkçe Karakter Sorunu

  • Hüseyin KÜÇÜK
  • - 15 Mayıs 2011
  • Ö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.

    <meta http-equiv="Content-Type" content="text/HTML; charset=utf-8" />

    Veri tabanımın ve toblolarımın karakter karşılaştırma tiplerini de utf8_turkish_ci 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 latin5_turkish_ci yaptım.

    <meta http-equiv="Content-Type" content="text/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('&#199','&#231','&#286','&#287','&#305','&#304','&#214','&#246','&#350','&#351','&#220','&#252');
    $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 =)



    2 Yorum:

    karincayazilim dedi ki...

    bu kadar site gezdim.. o kadar yöntem denedim bende senin gibi ancak bu karakter sorununa bir çözüm bir türü hiç bir sitede bulamadım... senin burda yazdıklarını okudum sonra başka bir sitede
    "php include Tr Karakter Sorunu

    by Yunus Ertürk on Oca.02, 2011, under Genel



    utf-8 kodlama sistemi kullanırken ilginç bir sorunla karşılaşabilirsiniz. utf-8 kullandığım bir sistemde include ile çağırdığım dosyalarda tr karakter sorunu yaşadığımı farkettim. Farklı yollar deneyerek ve araştırarak en sonunda problemin kaynağını buldum.

    Eğer kodlama için siz de notepad++ kullanıyorsanız sizde de olabilir aynısı. notepad++ ile php yazarken utf-8 kullanıyorsanız, üst menüde biçim kısmından utf-8 without BOM seçince problemden kurtuluyoruz." http://www.yunuserturk.com/2011/01/php-include-tr-karakter-sorunu.html bunları okudum..
    çözümü sonunda buldum...

    :D
    tüm php dosyalarınızı nodepad ile açıyoruz.. farklı kaydet diyoruz... TAMAMINA daha sonra da utf-8 olarak tamamını kaydediyoruz... hiç bir sorun kalmıyor...
    İlk kez burda yazdım... :) hadi kolay gelsin..
    bunu kesin çözüm olarak biloğunda duyur da millet faydalansın.. dediğin gibi dünyanın zamanı gidiyo b soruna...
    Abdulkerim KELEŞ

    medyun dedi ki...

    Öncelikle teşekkür ederim :)
    Burada anlatılan çözüm benim de denediğim bir yöntemdi. notepad kullanarak ayarları değiştirmek suretiyle yaptığım işlemlerde işe yaramamıştı. Kim bilir belki de ben yanlış yapmışta olabilirim her ne kadar kolay bir şey olsada.
    Fakat ben yine de kesin bir çözüm olabileceğine inanmıyorum. Yazımda da bahsettiğim hatta bahsetmediğim bir çok yöntem de aslında kesin olarak nitelendirilebilecek yöntemlerdi fakat işe yaramadılar. Bu yüzden bizi sonuca götürecek olan yöntemimiz kesin olandır diye düşünüyorum.

    Yorum Gönder

     
    Copyright (c) 2012 Hüseyin KÜÇÜK
    Php Yazılım Uzmanı, Öğretim Teknoloğu, Toplum Gönüllüsü