Turning gears are the logo of co-scripts

İnternette farklı nedenlerden kaynaklanan farklı Türkçe karakter görüntüleme sorunlarına rastlamışızdır. Benim de başıma pek çok defa nedenleri farklı sorunlar geldi. Her seferinde konuyu da tam anlamadan çözümler ürettim. Ancak sıfırdan mysql ve php ile bir uygulama hazırlayacaksanız, özellikle Türkçe karakter desteği gerekiyor ise önce şu sayfadaki temel bilgileri okumanızı öneririm. Buradaki bilgiler yeterli gelmezse aynı sayfada bahsedilen kavramları google'dan arayarak detaya inebilirsiniz.

Olayda 2 temel müdahil var. Birisi sunucu (MySQL) diğeri browserımız. Elimizdeki veriyi sunucuya gönderdiğimizde istediğimiz şekilde kaydedilmesi için gereken ile talep ettiğimizde sunucunun bize istediğimiz şekilde vermesi kısmı sunucu ayarları ile ilgili. 

Sunucudan istenilen formatta gelen verinin browser'da istenildiği gibi görünmesi ise html meta taglarımızla alakalı. Ancak bilmekte fayda var, sunucu verisi ana kriter. Yani sunucudan istenilmeyen formatta gelen veriyi browser istenilen formatta gösteremez.

Şimdi utf8 kabaca çok fazla dile destek veren bir karakter setleri koleksiyonu1. Ancak bazı dillere özel karakterlerin eklendiği (ve dile özgün çeşitlendirildiği, çevirimler içeren) sunumları var.Dilimize özgü bir sayfa hazırlayacaksak,yine de, utf8_unicode ve utf8_general'dan farklı olarak dilimize özgü utf8_turkish_ci setini kullanmalıyız. 

Karakter setine karar verdikten sonra, veri tabanının karşılaştırma setini (Genel Ayarlar-Sunucu bağlantısı karşılaştırması) utf8_turkish_ci olarak seçiyoruz. Tablomuzu oluştururken/oluşturduktan sonra (henüz boşken) İşlemler>Karşılaştırma seçeneğinden yine utf8_turkish_ci seçildiğini kontrol edelim.

Bundan sonra tablolarda metin tipi değişkenlerde mutlaka "karşılaştırma" kısmında utf8_turkish_ci olduğunu teyit ederek gidelim.

Tüm bunlar sunucunun metin tipi verileri alırken,saklarken,verirken utf8_turkish_ci kullanacağını, farklı bir karakter gelirse bile bu setteki karşılıklarına çevireceğini gösterir.

Sunucuyu bu şekilde sağlama alınca istemciye gitmeden önce php tarafında yapılacak tek şey var (başkaca çözümleri olsa da), pek çok fonksiyon ve 3-4 satırdan oluşan PDO komut grubunun dışında, PDO bağlantı tümcesine tek bir değişken eklemek yeterli oluyor. Bu hem veriyi sunucuya verirken hem de sunucudan veri çekerken işleri yoluna koyacaktır.

Örneğin:

	$db = new PDO('mysql:host=localhost;dbname='.$vtAdi.';charset=UTF-8', $vtKullaniciAdi, $vtParolasi,[PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"]);

 

Eklenen son parametre: [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"] php ayağını da sağlama alır.

Daha sonra herkesin bildiği meta tagı html içine koyduğunuzda (veya css ile ilgili @ eklendiğinde) herşey tam olarak TR karakterlerde hem okunur hem yazılır. Üstelik phpMyAdmin içinde de karakterler doğru görünür ve istediğiniz gibi manuel TR giriş yapsanız da bozulma olmaz.

TR karakter sorununa başka bir şekilde de rastlayacağımız kesin, çünkü halâ bilgi eksiğimiz var ve devşirme çözümlerle devam ediyoruz. Kolay gelsin...

co-scripts tag image turkce karakter sorunuutf8utf8_turkish_cimysql turkce karakter problemipdomysql_attr_init_commandset namesphp
ID:270 | Okunma:2506