PHP Türkçe Karakter Sorunu Kesin Çözüm

PHP site kodlarken veya yazılım yaparken karşılaşılan en büyük sorunlardan bir tanesi Türkçe karakter karmaşası. Yazımızda bunu nasıl aşabileceğinizi anlatıyoruz.

PHP Türkçe karakter sorunu için artık dur diyeceğiniz ve sonsuza dek bu sorundan kurtulacağınız yazıya hoş geldiniz 🙂


Öncelikle nedir bu karakter sorunu ve neden kaynaklanır ona değinelim. Genelde kodcular php türkçe harfler çıkmıyor tarzı şikayetler ile etrafta dolanırlar. Bu sorunda karakterler ya bozuk çıkar, ya soru işareti gösterilir ya da hiç görünmez. Aslında sorun php utf8 karakter kodlaması doğru tanıtılmadığı için kaynaklanır.


Türkçe karakter sorunu, hatalı dosya karakter kodlamasından veya hatalı veritabanı karakter kodlamasından kaynaklanmaktadır. Ayrıca bazı bot işlemlerinde, farklı sayfalardan farklı karakter kodlamasındaki sistemlere veri çekerken de aynı problem yaşanır.

Türkçe Karakter Sorunu Nasıl Oluşuyor?



Peki bu sorunu nasıl çözeceksiniz? Aslında sorunu çözmek için sebebini bilmeniz ve temelini iyi kavramanız gerekiyor. Yaptığınız sistemin, kullandığınız karakter kümesiyle tam uyumlu olması tüm sorunlarınızı çözecektir. Bunun için tüm dosyalarınızı kontrol etmeli ve içeriğinizin karakter kodlamasını bilmelisiniz.

  • 1. Kod dosyalarınızın karakter kümesi ne?
  • 2. Veritabanının karakter kümesi ne?
  • 3. Girilen içeriğin karakter kümesi ne?



Şimdi buradaki asıl önemli konu, Türkçe dilinden kaynaklanıyor 🙂 Yani php tr karakter sorunu tamamen Türkçe’deki sesli harflere odaklı bir hata.


Öncelikle kod dosyalarınızdan atıyorum index.php için hangi karakter kümesini kullandığınıza bakın. Header’da meta tag olarak charset=ISO-8859-9 kullanıyorsunuzdur muhtemelen.


Ancak… MySQL veritabanı karakter kodlamalarında maalesef bu küme yok. O sebeple hatanızın kaynağı burada. Kodlama işlemine başlamadan önce aşağıdaki adımları uygularsanız, Türkçe karakter sorunundan tamamen ve ileriye dönük olarak kesin koşulla kurtulursunuz.

Türkçe Karakter Sorunu Kesin Çözümü



1. Kod dosyalarınızın charset meta tagi UTF-8 olmalı.


Türkçe karakter desteğini UTF-8 karakter kümesi ile fazlasıyla alırsınız çünkü 🙂


2. Kod dosyalarınızın dosya karakter kümesi UTF-8 olmalı.


Bunun için dosyayı kaydederken ANSI yerine mutlaka UTF-8 seçmelisiniz. Güzel bir editörünüz varsa, File Encoding seçeneği mutlaka bulunur. Buradan UTF-8 seçmeniz yeterli olacaktır ve dosyayı öyle kaydedin mutlaka.


3. Veritabanı karakter kümeniz UTF-8 olmalı.


Veritabanı karakter kümenizi utf8_general_ci olarak seçerseniz, son aşamayı da başarıyla tamamlamış olursunuz.


Pek tabi son olarak, mysql bağlantısını kurduğunuz noktada aşağıdaki sorguyu, bağlantıyı hemen açtıktan sonra çalıştırmanız gerekiyor:


mysql_query(“SET NAMES UTF8”);


Gördüğünüz gibi bu 3 madde ile tam bir uyum sağlamış oluyoruz ve Türkçe karakterler dışında diğer Unicode karakterleri de başarıyla artık web sayfamızda görüntüleyebiliyor olacağız.


Şimdi geçelim daha detaylı işlemlere. Elinizde zaten yazılmış bir script var diyelim ve başlangıçtan bu hata yapılarak uyumsuz bir karakter kümesiyle kodlanmış. Sizde bu scripte bot yazdınız ve UTF-8 kullanan bir siteden içerik çekiyorsunuz. Doğal olarak çekilen içerikte bozulmalar meydana gelecektir. Çünkü karakter kümesi uyuşmuyor. Burada yapmanız gereken UTF-8 kodlamayı scriptinizin anlayacağı kümeye çevirmek olacaktır.


Bunun için yararlanacağımız komut: iconv.


$utf8donustur = iconv(‘UTF-8’, ‘ISO-8859-9’, $deger);


Çektiğiniz veriyi bu şekilde karakter kümesini dönüştürerek veritabanına girerseniz karakter sorununuz çözülür. Bir de bunun tam tersi olduğunu düşünün. Yani siz UTF-8 ve karşı site ISO-8859-9 ise, yapacağınız şey iconv komutunda bu iki değerin yerini değiştirmek o kadar.


Unutmadan bir de çaresizce Türkçe karakterleri replace etme arayanlar vardır diye komutu verelim, php türkçe harfleri ve karakterleri dönüştürme işlemi için kullanabilirsiniz:

PHP Türkçe Karakter Replace Kodu



function replace_tr($text) {
$text = trim($text);
$search = array(‘Ç’,’ç’,’Ğ’,’ğ’,’ı’,’İ’,’Ö’,’ö’,’Ş’,’ş’,’Ü’,’ü’,’ ‘);
$replace = array(‘c’,’c’,’g’,’g’,’i’,’i’,’o’,’o’,’s’,’s’,’u’,’u’,’-‘);
$new_text = str_replace($search,$replace,$text);
return $new_text;
}


Yukarıdaki kod ile, çaresiz durumdaysanız Türkçe karakterleri en azından okunabilir hale getirebilirsiniz.


Yazımız bu kadar 🙂 Herhangi bir sorun yaşarsanız sormaktan çekinmeyin.

1 thought on “PHP Türkçe Karakter Sorunu Kesin Çözüm

Unknown için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir