Php ve Mysql’de Türkçe karakter sorunu ve çözümü

Share on Facebook11Tweet about this on TwitterShare on Google+1Share on LinkedIn0Email this to someone

Web sayfamızı oluşturmadan önce hangi karakter setini kullanacağımıza karar vermek gerekir. http://www.iana.org/assignments/character-sets adresinden de görebileceğiniz üzere standartlaşan onlarca karakter kodlaması vardır. Karakter kodlaması, karakter setlerinden oluşur. ISO-8859, MS-Windows ve Unicode en çok kullanılan karakter kodlamalarındandır. ISO-8859-9′da bir ISO-8859′un bir karakter setidir.

ISO-8859 karakter seti dillere desteğini bölümler halinde vermiştir. İlk bölümde -bu bölüm ISO-8859-1 (Latin1) olarak bilinir- İngilizce, Franszıca, İspanyolca, Portekizce gibi dillere destek vermiştir. Türkçe desteği ancak 9. bölümde ISO-8859-9 (Latin5) karakter setiyle gelmiştir. MySQL’de bulunan latin5 ile ISO-8859-9 aslında aynı şeylerdir.

Türkçe diline destek veren karakter setlerinden en çok kullanılanları; ISO-8859-9 (latin5) Windows-1254 ve UTF-8’dir. UTF-8 çoklu dil desteği olan bir karakter setidir. Yani Türkçe’nin yanında örneğin Rusça’ya da destek vermektedir. Diğerlerinden farkı daha çok dile destek verdiğinden dosya büyüklükleri biraz daha fazla olabilmektedir.

Şimdi bir siteye başlamadan önce Türkçe karakter problemi ile karşılaşmamak için yapmanız gerekenlere sırayla bakalım.

Sitemizi oluşturmaya başlamadan önce açık kaynak kodlu bir yazılım olan Notepad++ (http://notepad-plus-plus.org/) programını kurmanızı öneririm. Bu programı kullanarak sitemizin tüm karakterlerinizin bozulmasına neden olabilen UTF-8 BOM (Byte Order Mark) sorununu ortadan kaldıracağız.

Html ve php dosyalarımızı yazarken karakter setini UTF-8 kullanmak; her ülkeden ve dilden kullacılarının sitemizi ziyaret ederken karakter sorunları ile karşılaşmamasını sağlar.

Sitenizi oluşturmaya, html ve php kodlarınızı yazmaya başlamadan önce Notepad++’ı açıp Format menüsünden UTF-8 without BOM‘u seçin ve dosyalarınızı utf8 formatını kullanarak yazın. Notepad++’ın Settings>Preferences>New Document bölümünden de her yeni dosya oluştururken dosya formatının otomatik olarak utf-8 without bom olmasını sağlayabiliriz.

Daha sonra html kodlarınızı yazmaya başlayabilirsiniz. HTML ile de sayfanızın karakter setini UTF-8 olarak ayarlamanız gerekiyor. Etiketlerinin arasına yerleştireceğiniz aşağıdaki kod ile bu işi yapacağız.

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

Şimdi MySQL veritabanımızı oluşturalım.. Veritabanımızı oluştururken Karşılaştırma bölümünden utf8_turkish_ci yi seçmenizi öneriyorum. Böylelikle MySQL’de oluşturacağınız tüm tablo ve alanlar utf8 kodlamasına göre oluşturulacak. Artık MySQL’den veri girişi yaptığınızda Türkçe karakter problemi olmadan verilerinizi görebiliyor olmalısınız.

PHP kodlarıyla MySQL’e bağlanırken yapmamız gereken bir şey daha var. SET NAMES utf8 kodunu çalıştırmak.. Bunu da şu şekilde yapıyoruz;

<?
php mysql_connect("localhost","root","1234");
mysql_select_db("testdb");
mysql_query("SET NAMES UTF8");
?>

Bunları yaptıktan sonra Türkçe karakter problemiyle karşılaşmamanız gerekiyor…

Summary
Php ve Mysql'de Türkçe karakter sorunu ve çözümü
Article Name
Php ve Mysql'de Türkçe karakter sorunu ve çözümü
Description
Php ve Mysql'de Türkçe karakter sorunu ve çözümü
Author
Share on Facebook11Tweet about this on TwitterShare on Google+1Share on LinkedIn0Email this to someone
  • kardeş çok sağol sabahtan beri uğraşıyordum demek UTF-8 without BOM danmış yeni anladım öyle yapınca gerekli karakterleri düzelttim oldu çok sağulasın 🙂

  • Sağol kardeşim

    mysql_query(“SET NAMES UTF8″); bu kod olayı çözdü teşekkürler 😉

  • Allah razı olsun.Bu karakter sorunu insanı çileden çıkarıyordu. 🙂

  • Gerçekten çok ama çok faydalı bir anlatım olmuş. Sayenizde türkçe karakter hatasından kurtuldum. Teşekkkürler.

  • Helal olsun bende yeni fark ettim neredeyse bütün diller tek tek denedim çok çok teşekür ederim…

  • Merhaba,
    localde bir proje üzerinde çalışıyorum. Notepad++ kullanıyorum. UTF-8 BOM’suz kodlama sistemini kullanıyorum. Dosyalarımda, klasörlerimde, MySQL’de hiçbir yerde Türkçe karakter problemi yaşamıyorum. Fakat enteresan başka bir durum yaşıyorum:
    localhost’ta A isimli bir klasörüm var. İçinde mesela B, C, Ç isimlerinde klasörler var. B, C ve Ç klasörlerinde, isimleri sayılardan oluşan png dosyaları var. Ç klasörünün isminde Türkçe’ye özel ı, ş, ç gibi harfler var diye bu klasördeki resimleri okuyamıyor. Fakat, B ve C klasörlerinin isimlerinde Türkçe’ye özel harfler olmadığından, o klasörlerdeki resimleri okuyabiliyor.
    Sorunu nasıl çözebiliriz.

    • admin

      Localde çalışsa bile sunucu üzerinde türkçe karakter içeren klasör ve dosya isimlerine verdiğiniz referanslar görüntülenmeyecektir. Tavsiyem bu tür isimlerdirmelerinde türkçe karakter kullanmamaktır.

  • Sağol kardeş gerçekten çok yardımcı oldun.

  • çok teşekkür ederim. Güzel anlatım

  • teşekkürler..

  • snn

    Teşekkürler sorun çözüldü.
    Atladığım yer buraymış.
    mysql_query(“SET NAMES UTF8”);

  • eyvallah kardeşim

  • Hocam Çok Teşekkür Ettim Sayende Sorunu Çözdüm 🙂 Güzel Anlatım Olmuş :=)

  • çok teşekkür ederim çok işime yaradı gerçekten.

  • Şu Sıkıntıdan Kurtulamadım giTTi Php Yi Html e Çevirecem Bu Gidişle 🙂

  • Teşekkürler

  • süleyman kılıçgil

    ne kadar teşekkür etsem az gelir. Bir haftadır gezmediğim form okumadığım makale kalmadı neredeyse. Sorunum senin sayende çözüldü.

  • Aysun

    Teşekkürler :))

  • vallaha sağol ya

  • Teşekkürler

  • Menekşe

    Çoook teşekkürler :))

  • cihan

    Hocam teşekkürler aynı sorunu sublime text üzerinde yaşıyordum.Şimdi halloldu.

  • çok güzel bilgiler olmuş işime yaradı teşekkürler.

  • Alican

    hocam valla cok hora gecti, eline saglik

  • teşekürler hocam sorunu çözdü

  • mysql_query(“SET NAMES UTF8”); sitenin A dan Z ye tüm karakter proplemi bunu ayar.php ye eklemem le çözüldü 2 gündür sebebini arıyordum teşekkürler.

  • Teşekkür EDERİM!

  • mysql_query(“SET NAMES UTF8”); sorunu ortadan kaldırdı teşekkürler.

  • mustafa

    Hocam 1 aylık mesaimi hallettin. Hakkını helâl et.

  • Çok teşekkürler.

  • Bünyamin

    Selim Yılmaz paylaşım için teşekkür ederim.

  • Hocam çok detaylı bir açıklama olmuş, uzun zamandır araştırmasını yaptığım bu konu ile artık tarafınızdan bilgi sahibi oldum diyebilirim. Konu hakkında verdiğiniz değerli paylaşımınız benim gibi diğer ihtiyaç sahiplerinin de işine çok yarayacaktır umuyorum, teşekkürler..

  • Metin

    Kardeşim Sağol çok işime yaradı iki üç siteye daha bakmıştım çözemedim senin sayende oldu teşekkürler :))

  • Omer

    Abim Yardım Edermisn Ben Localhost Giriorum Dashboarda atıyor giriş yapmak istiyorum phpmyadmine direk giriyor giriş yeri cıkmıyor abim acil bilen varsa 🙁

  • barış

    selim bey verdiğiniz bilgiler çok işime yaradı. teşekkür etmeden geçemedim.

  • Merhaba Arkadaslar Benım bir sorum olacaktı rusça yazı kaydettım sıteye verıtabanına sorunsuzz kayıt oldu hatta sayfaya cekıyor sadece sefurl kısmı calısmıyor url ornek:http://localhost/websitem/kategori–.html url boyle cıkıyor –boyle ısaret var normalde baslık budur:Компьютерн­ые игры mysql utf8 bin ve utf8 general ci

  • Volkan SAM

    hocam elimde excel cıktısı alabilmem için hazırladığım bir kod var. ancak veritabanımda herşey düzgün görünmesine ramen bu kodu çalıştırdığımda harf hatası alıyorum. bu kodu html taglarında kullanamıyorum. çalışmıyor ozaman. ilacım burada mysql_query(“SET NAMES UTF8”); ama yerleştirecek yer bulamadım. yarodımlarınızı esirgemezseniz sevinirim…
    tesekkurler… volkansam@hotmail.com

  • Muhammeb Mermer

    Allah razı olsun üstad, çok teşekkür ederiz, emeğine sağlık 🙂