Php Türkçe Karakter Hatası ve Çözümü

Türkçe karakterler özellikle webmaster’lar için bazen can sıkıcı olabilir. Türkçe karakterler derken, aksam harflerden bahsediyorum yani Türkçe’de kullanılan ama ingilizcede kullanılmayan karakter’ler web sayfalarımızda karakter sorunlarına neden olabiliyor. Bu yazımızda Php’de Türkçe karakter hatası ve çözümünden bahsedeceğiz. Bunun için ne gibi önlemler alabilir ve çözüm yollarını uygulamalı olarak anlatacağız.

Türkçe karakter sorunu veren harfler hangileri? : Türkçe’de kullanılan ama ingilizcede kullanılmayan harfler şunlardır.

Aksam Harfler: ç,ş,ğ,ı,ü,ö

Bu harfler sayfa içi ve veritabanında doğru ayarlamalar yapılmadan kullanıldığında sizlere sorun yaşatabilmektedir. Karakter sorunu bir web sayfası için neden olur? yani bu sorunu ney tetikliyor da, ekranda anlamsız şeyler çıkıyor?

Bunun mantığını size anlatalım, Html’de bir sayfa oluşturduğunuzda ve bu sayfanıza HTML kodlarınızı yazmaya başladığınızda sayfanın default yani (varsayılan) karakter seti “Latin1” dir. Siz Türkçe desteği olmayan bir karakter seti seçtiğinizde hata alacaksınız. Veya herhangi bir karakter seti seçmediğiniz durumlarda ise default’ta yani varsayılan set olan “Latin1” algılanacaktır.

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

Latin1 karakter setinin Türkçe karakter desteği olmadığı için sorun yaşayacaksınız. Bu Mysql veritabanı kullanıyorsanız onun içinde geçerli bir durumdur. Önce sayfa içimizde nasıl bir yapı oluşturacağız hemen anlatalım. Html5 kullanacaksanız aşağıdaki kodlar işinizi kolaylıkla çözecektir.

<html lang="tr">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">

Sorun yaşamamak için sayfamızın <head> tagları arasında utf-8 karakter setini kullanıyoruz. Eğer Html5’den daha düşük bir sürümde çalışacaksanız o zaman sayfa içinizde şunu kullanmalısınız.

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

Sayfa içinde bu düzenlemeleri yaptıktan sonra bir sonraki işlemimiz veri tabanı kısmı olacaktır. Veriler veritabanımıza kayıt edilirken karakterleri düzgün yazdırmak için ise öncelikli olarak veritabanımızı utf8_turkish_ci olarak seçiyoruz. Eğer bu seçimi boş geçersek default karakter seti olan Latin1 otomatik olarak çalışacaktır. Buda sorun yaşatacaktır.

Yani karakter seti sorunlarının en başında gelen ve yapılan en büyük hataların başında veri tabanı karakter seti kısmının boş geçilmesi gelmektedir.

Geldik son kısma. Burası çok önemli olduğu için özellikle bu kısma dikkat edilim. Şimdi veri tabanı bağlantı dosyamızda Utf-8 setinin seçilmesi ve bağlantının bu şekilde yapılması gerekmektedir. Ben sizin için PDO ‘da benim içerik yönetim sistemim için kullandığım bağlantı dosyamı göstereyim.

<?php
//Database Bağlantısı.
error_reporting(0);
$host = "localhost";
$dbname = "dbadi";
$username = "root";
$password = "123456";
$db = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", "$username", "$password");
//Database Bağlantısı Tamamlandı.

Burada görüyorsunuz bağlantı yaparken Utf-8 karakter setini seçiyorum ve bu şekilde bağlanıyorum. Evet arkadaşlar bu dediklerimi uygularsanız veya web sayfanız için sorun yaşadığınızda, bu sorunları bu anlattığım bilgilerden yola çıkarak çözebilirsiniz.

Hala Düzelmedi mi? (Utf-8 Bom Problemi)

Bu işlemlerin hepsini eksiksiz yapmanıza rağmen hala Türkçe karakter sorunu yaşıyorsanız o zaman problem utf-8 BOM (Byte Order Mark)’dan kaynaklanıyor olabilir.

UTF-8 BOM (Byte Order Mark) sitenizin karakter’lerinin bozulmasına neden olabiliyor. Bom, dosyanızın utf-8 olduğunu gösteren bir işarettir. Bunun çözümü için kodlama yaptığınız editörden Bom’u dahil etmeden dosyamızı tekrar kaydetmemiz sorunu çözecektir.

Bunu uygulamalı olarak gösterelim. Ben Sublime Editör kullanıyorum bu nedenle Sublime üzerinden sizlere göstereceğim. Öncelikle Türkçe karakter sorunu yaşadığınız dosyayı sublime ile açıyoruz.

Türkçe karakter sorunu bom utf-8 çözüm

Dosyayı açtıktan sonra şu yolu izliyoruz.

File -> Save With Encoding -> Utf-8 With Bomb

Seçimini yapıp dosyanızı bu şekilde farklı kaydederseniz ve çalıştırırsanız sorunun muhtemelen çözüldüğünü gözlemleyeceksiniz. Anlamadığınız yerler olursa yada problem devam ederse yorum yapın çözelim.

Translate »