Birkaç Aşamada Türkçe Karakter Sorununa Çözüm

Bu damar meselenin ağlatmadığı, sızlatmadığı yoktur. Uyutmadığı da pek çoktur. Varsa da kendime ağlıyor ve de helal deyip konuya giriyorum.

Türkçe karakter meselesi PHP ve MySQL tabanlı işlerde başlı başına bir ya da iki yöntemle her zaman malesef aşılamıyor. Bir kaç yerde bazı bazı ufak dokunuşlar yapmak gerekebiliyor. Basit ve anlaşılır yöntem olan adım adım (sekerekten) yöntemiyle başlayalım.

1- Tarayıcı bazlı karakter set tanımı

Browser’lar web projemiz üstündeki <meta> tagındaki anahtarlardan biri olan charset‘te tanımlı olan charset encoding’i dikkate alır. Eğer buraya bir değer atanmaz ise tarayıcının varsayılan olan character set encoding ayarını baz alarak işlem görecektir.

Tam bu esnada “peki charset anahtarına hangi değeri vermeliyizdir? ” sorusu gelmektedir. Bunlardan sadece biri temsili olan iki örnek veriyorum;

  • ISO-8859-9 v.b
  • UTF-8

Burada ISO-8859-9 karakter seti lokal bir settir. Yani bu tanımı yaparak içeriğimizde sadece Türkçe karakterin olacağını keskin bir ifadeyle bildirmiş oluyoruz.

Fakat UTF-8 gibi evrensel nitelik taşıyan bir charset’i baştan tanımlar isek ileride farklı dil içeriklerinde hiç bir sıkıntı yaşamadan ilerlemiş oluruz.

Hoop ahanda böle

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

2- MySQL müdehalesi

Oluşturulan bir veritabanının yine evrensel olan utf-8 karakter set’ine bağlanması gerekmektedir.

CREATE DATABASE `demo`
   CHARACTER SET 'utf8'
   COLLATE 'utf8_general_ci';

Tablolarda da aynı durum geçerlidir.

CREATE TABLE `demo` (
  `id` INTEGER(11) NOT NULL AUTO_INCREMENT,
  `isim` VARCHAR(64) DEFAULT NULL,
  `soyisim` VARCHAR(64) DEFAULT NULL,
  PRIMARY KEY (`id`)
)
ENGINE=MyISAM
CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

3- PHP’de MySQL database seçimi sonrası karakter set sorgusu tanımlama

PHP üzerinde MySQL bağlantısı sağlayıp database seçimi yaptıktan hemen sonra (SELECT, UPDATE, INSERT işlemleri öncesi) aşağıdaki SET NAMES sorgusunu veritabanınıza göndermeniz yeterli olacaktır.

mysql_connect("host","username","password");
mysql_select_db("demo");
mysql_query("SET NAMES 'utf8'");

4- PHP editörümüzün varsayılan karakter set’ini utf-8 yapma

PHP kodlarını yazdığımız editörün yazı karakter set’ini utf-8 yapmamız yukardaki maddelerin yanında işi biraz daha kesinleştirecektir.

Karşıdan karşıya geçerken önce sola sonra sağa sonra tekrar sola bakın. Görüşmek üzere…

  • demir

    Konu türkçe karakter sorunu olunca, ben de nedense türkçemiz ile ilgili bir iki yere takıldım yazınızda…
    Yazının başında “…uyutmadığı yoktur” diyerek aslında olumlu bir yorumda bulunmuşsunuz. Burası “uykusuz bırakmadığı yoktur” olarak değiştirilirse daha doğru olacaktır sanırım. Ve devamında “varsa da kendime ağlıyorum…” demişsiniz. Bu sorundan dolayı ağlamayan var olabilir ama bu ağlayanların olduğu gerçeğini değiştirmez ve yalnız ağlamanızı gerektirmez. Hala sizinle aynı acıyı paylaşanlar var.

    İyi çalışmalar.

    • Değerli Demir,

      Uyarının ardından hemen düzelttim. Tabi konumuzun Türkçe karakter problemi olmasından dolayı soyut kavramlarla bağdaştırılması tartışılabilir. Asıl konuya teknik olarak nasıl baktığını merak etmekteyim. Dikkatin ve ziyaretin için teşekkür ederim.

  • Php dosyalarında düzenleme yaparken Dreamweaver kullanılıyorsa, son başlıkta söylendiği gibi, karakter setini UTF-8 yapmalı yoksa yamuk yumuk çıkacaktır Türkçe karakterler.

    Kodları not defterine alıp en alttaki seçenekten ANSI yerine UTF-8’i seçip kaydetmek de bir yöntem. Ama En güzeli Notepad+. Yani UTF-8 (Bomsuz) olarak kaydetmek.

    Yukarıdaki yazılara ek olarak böyle davranılırsa ne sorun çıkar ne de taş düşer 🙂