PHP

PHP MYSQL türkçe Karekter Sorunu

PHP MYSQL türkçe Karekter Sorunu

Benim de önceleri sıkça yaşadığım fakat sonunda kati sonuca ulaşmış olduğum ve web tasarımla ilgilenen daha kısaca ilgilenmeye başlayan birçok arkadaşın da sıkca yaşadığı bir problemin kati ve net çözümünden bahsetmek istiyorum.. Evet problemimiz PHP ve MySQL ile işlem yapan sistemlerde yaşadığımız karakter sorunumuz. Herşeyden önce ben tüm sistemlerinizde evrensel karakter seti olan UTF-8 kodlamasını tavsiye ediyorum. Ve yapacağım tüm işlemleri UTF-8 üzerine anlatacağım.

Benim de önceleri sıkça yaşadığım fakat sonunda kati sonuca ulaşmış olduğum ve web tasarımla ilgilenen daha kısaca ilgilenmeye başlayan birçok arkadaşın da sıkca yaşadığı bir problemin kati ve net çözümünden bahsetmek istiyorum.. Evet problemimiz PHP ve MySQL ile işlem yapan sistemlerde yaşadığımız karakter sorunumuz. Herşeyden önce ben tüm sistemlerinizde evrensel karakter seti olan UTF-8 kodlamasını tavsiye ediyorum. Ve yapacağım tüm işlemleri UTF-8 üzerine anlatacağım.


İsterseniz konumuz olmasa da öncelikle UTF-8 nedir, ne değildir bundan bahsedelim. UTF-8, 8 bitlik bir karakter kodlamasıdır yani ve Unicode Transformation Format teriminin kısaltmasıdır. Evrensel bir kodlama formatıdır ve tüm dillerdeki karakterleri kapsar. Bu yüzden UTF-8 kodlamasını kullanmakla evrensel standartlarda bir karakter kodlaması kullanmış oluruz. Unutmayın ki Google da UTF-8 karakter kodlamasını öneriyor. 

Evet şimdi de “Bu karakter kodlamalarını sistemimize iyi mi tanıtacağız ki yazdığımız scriptler ve sistemlerde karakter sorunu yaşamayalım?” sorusunun cevabına geçelim yavaş yavaş 

Herşeyden önce yapmanız ihtiyaç duyulan kodlarınızı UTF-8 karakter setinde kodlama icra eden bir derleyicide yazmak olmalı. Ve karakter kodlamasını BOM olmadan seçeneğiyle yazmak. Bu mevzuda detaylı bilgiyi yakuter‘in blogundaki UTF-8 BOM (Byte Order Mark) Nedir? Yazısında bulabilirsiniz.

Sistemimizi yazmaya başladığımızda ilk yapmamız gereken şey sayfalarımızın HTML karakter yorumlamasını başlık kısmında belirtmek. Bunun için aşağıdaki kodları sayfalarımızın < head > … < /head > kısmına yerleştiriyoruz:

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

Bu işlem sayesinde tarayıcılarımız karakterlerimizi UTF-8 formatında yorumlayacaklardır. Ardından MySQL tablolarımızın tüm karakter kodlamalarını UTF-8 formatına çevirmek için aşağıdaki kodu php ile çalıştırıyoruz:

mysql_query("ALTER DATABASE veritanabi_adı
CHARACTER SET utf8
DEFAULT CHARACTER SET utf8
COLLATE utf8_unicode_ci
DEFAULT COLLATE utf8_unicode_ci
");

veya aşağıdaki kodu phpMyAdmin aracılığıyla SQL sorgusu olarak çalıştırıyoruz:

ALTER DATABASE veritanabi_adı
CHARACTER SET utf8
DEFAULT CHARACTER SET utf8
COLLATE utf8_unicode_ci
DEFAULT COLLATE utf8_unicode_ci
;

Eğer ortada bir veritabanımız yoksa ve yeni bir sistem kuracaksak oluşturduğumuz tüm tablolar ve field’leri utf8_unicode_ci karakter kodlamasında oluşturuyoruz.

Ardından sistemimizde MySQL bağlantı ayarlarını yaptığımız satırların altına aşağıdaki kodu yazıyoruz:

mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION = 'utf8_unicode_ci'");

Son olarak sayfalarımızın başına aşağıdaki PHP kodunu eklemek eğer sunucu varsayılan karakter seti farklıysa sayfalarımızdaki UTF-8 karakter sorununu çözecektir.

header("Content-Type: text/html; charset=UTF-8");

Eğer tüm sayfalarınızda include ettiğiniz bir dosya varsa (config.php, ayar.php vs.) yukarıdaki kodu sadece o dosyanın başında yazmanız yeterli olacaktır.

Tüm bu işlemleri uyguladıysanız artık karakter problemi diye birşey lügatimizde kalmadı. Tüm işlemlerinizde dilediğiniz gibi Türkçe karakterlere yer verebilirsiniz.

Not: Hala Türkçe karakterlerde sorun yaşıyorsanız muhtmelen server karakter ayarlarını da değiştirmeniz gerekecektir. Eğer server yöneticisi değilseniz bunu hosting firmanızdan isteyin. Yerel sunucunuzda bu problemleri yaşıyorsanız Apache’nin conf dosyasını düzenlemelisiniz.

HENÜZ YORUM YAPILMAMIŞ

YORUM GÖNDER