PHP – MySQL Türkçe Karakter Problemi Çözümü

PHP – MySQL Türkçe karakter sorunu için bir de sunucu tarafındaki bu çözüme göz atmanızda fayda var.

PHP ile uzun zamandır uğraşıyorsanız bu sorunla mutlaka bir yerde karşılaşmışsınızdır. Özellikle türkçe karakterlerin soru işareti şeklinde belirmesi herkesi çileden çıkaran bir problemdir. Bu sorunla alakalı olarak piyasada çok fazla çözüm örneği var. Hepsi etkili olmakla birlikte her şeyi deneyip bir türlü bu sorunu aşamayanlar da vardır. İşte benim hikayemde aynen böyleydi. Stackoverflow‘u talan ettim, Google’la yatıp kalktım, her ne yaptıysam bir türlü çözemedim. Benim sorunum şu şekildeydi:

Daha önceden başka bir sunucu üzerinde hazırladığım kodlarımı sağlıklı bir şekilde çalıştırırken, sırf başkalarına yük olmamak ve artık kendi sunucumun gerekliliğinin farkına vararaktan kendime bir VPS kiraladım. Bir önceki sunucudan indirdiğim dosyalarımı ve MySQL yedeğimi yeni sunucuya hiçbir değişiklik yapmadan taşıdım fakat yeni içerik eklemek istediğim zaman içerikteki ilk türkçe karakterden sonraki hiçbir harfin ve kelimenin kaydedilmediğini gördüm. mb_detect_encoding ile karakter kodu tahlili yaptığımda içeriğin ASCII olduğunu gördüm. Oysa tüm dosyalarım UTF-8 ve hatta BOM‘suz olarak kaydedilmişti. MySQL veritabanım MyISAM motoruyla çalışıyor, karakter kodu da utf8_general_ci idi. Veritabanı bağlantımı da yapar yapmaz

mysql_query("SET NAMES utf8");

ile verilerin UTF-8 formatında kaydedilmesini ve çekilmesini sağlıyordum.. Yani her şey olması gerektiği gibiydi. Hatta şimdiye kadar hiç ihtiyaç duymadığım halde sayfaların başına

header('Content-Type: text/html; charset=utf8');

bile ekledim yine de işe yaramadı.

Neyse mevzuyu çok uzatmayayım. Olay aslında sandığım kadar uzakta değilmiş. Yani araştırdığım çözümlere nazaran bulduğum çözüm hakkaten yanı başımdaymış. Eğer siz de benim gibi her şeyi denediyseniz ve bir türlü çözüme ulaşamadıysanız, bi de php.ini ayarlarınız kontrol edin. php.ini ayarlarınızda öncelikle mbstring parametrelerinin olduğundan emin olun. Eğer mbstring parametreleri var ise, ayarlarınızın varsayılan olarak Japonca’ya ayarlanmış olduğunu görürseniz işte size sıkıntı çıkaran satırlar onlar. mbstring.configuration size uygun gelen ayarları yapıp, Apache’yi yeniden başlattığınızda derin bir oh çekmeniz olasıdır. ben yine de yapmanız gereken ayarları aşağıya yazıyorum, siz ihtiyacınız olanı alıp kullanırsınız.

mbstring.language = Neutral (Burası bende Japanese idi)
mbstring.http_input = auto
mbstring.http_output = UTF-8

İşte benim sıkıntım bunlardan ibaretmiş. Elbette tek çözüm budur demiyorum, ancak siz de benim gibi her şeyi deneyip umutsuzluğa düştüyseniz, mbstring parametrelerini bir gözden geçirmeyi deneyin. Sağlıcakla,

İyi kodlamalar..

4 yorum

Bir yanıt bırakın

E-posta hesabınız yayımlanmayacak.


*