msgbartop
I would love to change the world, but they won't give me the source code
msgbarbottom

31 May 09 Php / Mysql Charset UTF-8 Problemine Çözüm

Bir süredir Php/Mysql ile uğraşıyorum ve daha yolun başındayken bırakma noktasına getiren şey charset sorunu oldu. Bir süre bu işlerle uğraşmış olan herkes charset problemlerinin ne kadar vahim ve sinirleri fazlasıyla yıpratan bir sorun olduğunu bilir. Türkçe karakterlerle uyumlu olan ISO-8859 – 9 her ne kadar uyumlı olsa da çok zaman sorun çıkarır. Windows-1254’te güzel olmasının yanında çok sorun çıkarır. Ve globalleşen dünyanının getirdiklerinden biri de hemen her dilin her karakterini gösteren UTF-8 olmuştur.

Ben de bu yüzden UTF-8 ile başladım. Php UTF-8, Mysql UTF-8 ama gördümki Mysql’e yazılan verilerin ne olduğu belli değil. ı yazıyorum i oluyor. ş’ler, ç’ler ? şeklinde. İnat ettim ve çözümü buldum.

Aynı sorunları yaşıyorsanız aşağıdakilerin tümünü yaptıktan sonra muhtemelen siz de derdinize derman bulmuş olacaksınız.

Öncelikle Mysql veritabanınızın UTF-8 olarak belirlendiğinden emin olun. Çok kullanışlı bulduğum Mysql Front programında veritabanını sağ tıkladığınızda özellikler bölümünden seçebilirsiniz. Collation bölümünü hiç değiştirmeyin. Bırakın boş kalsın. Boş değilse de utf_general_ci yapın.

Muhtemel Sorun — 1

Php dosyanız UTF-8 formatında değil, ANSII formatında!

Çözüm: Dosyayı notepad ile yani bildiğimiz not defteri ile açın ve hiçbir şey yapmadan farklı kaydet seçeneği ile kaydetmeye geçin. Dosyanın nereye kaydedileceğini gösteren yerde sağ alttan ANSII yerine UTF-8 seçin ve kaydedin. Eğer projeye yeni başlıyorsanız ve Dreamweaver gibi bir program kullanıyorsanız başlamadan yeni dosya dillerini UTF-8 olarak ayarlayın. Dreamweaver yeni sürümlerde sağ altta dili gösterir.

Muhtemel Sorun — 2

Verileri Mysql’e UTF-8 olarak göndermiyorsunuz.

Çözüm: Genelde veritabanı bağlantı dosyası db.php gibi tek bir dosyadadır ve veritabanı gereken yerlerde bu dosyayı çeker, devam edersiniz. Eğer siz her dosya için yeniden yazıyorsanız siz de hemen tek dosyaya geçin. Aşağıda vereceğim kodların tek bir tanesi bile işinizi görecektir belki ama siz yine de hepsini o dosyaya koyun.

En başa:

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

Mysql bağlantı sorgusundan sonra:

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

Muhtemel Sorun — 3

Hala mı olmuyor?

Çözüm: Sizin işiniz hex editöre kalmış. Günlerce aradığım çözüm işte yazının bu kısmı. Ne notepadde ne Dreamweaver’da hiç bir yerde göremeyeceğiniz sayfanın başındaki lanet karakterler. Ancak ve ancak hex editörlerde görebilirsiniz. Bulmak çok kolay olmayabilir. Ama siz db bağlantı dosyanızdan itibaren aramaya başlayın. Muhtemel tüm dosyalara bakın. Sayfanın en başında <?php taginden önce üstünde 2 tane nokta olan ı, iki tane > işareti ve bir tane  ters soru işareti  gibi karakterler olan bir curcuna. Bunları hex editörde silin ve kaydedin. Hepsini silin. Satırın başında bir tek <?php kalsın. Hex editör olarak ücretsiz uygulamalar bulabilirsiniz. Benim favorim Hex Editör Neo.

Eğer hala sorun devam ediyorsa alta bir yorum ekleyin ve bir bakalım ne yapabiliriz.

Sorunsuz satırlar…

Tags: , , , , , , , , , , , ,

Reader's Comments

  1. |

    Merhaba abi„, abi deme isteği duydum benden yaşça büyük olabilirsin ben 15 yaşındayım … neyse abi dediğin herşeyi yaptım fakat hiç bir sonç alamadım sorunumdan http://www.mjturkiye.net/forum/Php-Turkce-Karakter-Sorunu-t181285.html bu adreste de bahsettim.. bana yardım edersen çok mutlu olurum…

  2. |

    abi iletişimi kestin bi anda noldu ya :(

  3. |

    Veritabanının dil kodlamasının tamamen UTF-8 ve utf_general_ci olduğundan eminsin değil mi? Ve sonradan açıp düzenlediğin tüm dosyalarda hex editörle düzeltilmesi gereken sorunlar olabilir. Hiç ellememişsen muhtemelen sorun yoktur. İnternette o bozuk karakterleri görebileceğim bir yer var mı?

  4. |

    abi anlık iletişim adresi verebilirsen çok güzel olur… mailini aldım cevapta yazdım ama gitmedi sanırsam cevap bi msn falan varsa daha rahat konuşuruz..

  5. |

    abi nolur yardım et 2 arada bi derede kaldım nolur yardım et abi hatta scriptin gelirini senle paylaşıcam söz yeterki ban yardım et.. :( benim msn weysi@w.cn

  6. |

    Sorunum çözülmedi ama bukadar yardımcı olduğun için teşekkür ederim…

  7. |

    Teşekkürler.

Leave a Comment


Get Adobe Flash playerPlugin by wpburn.com wordpress themes