HTML sayfanızı oluşturmadan önce hangi karakter setini kullanacağınıza karar vermelisiniz. Buradan 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 karatker 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.
Size önerim her zaman UTF-8 kullanmanız. Örneğin Wordpress her ülkeden her dilden kullanıcıların yazı yazarken karakter problemi ile karşılaşmaması amacıyla UTF-8 kodlamasını kullanmaktadır. Şimdi bir siteye başlamadan önce Türkçe karakter problemi ile karşılaşmamak için yapmanız gerekenleri sırayla anlatacağım..
Html ve php dosyalarınızı yazarken özgür yazılım ürünü olan Notepad++ programını kullanmanızı öneriyorum. 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 açılışta dosya formatını otomatik olarak utf-8 without bom seçmesini 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. <head></head> 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 veritbanı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 gerekn 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("deneme");
mysql_query("SET NAMES UTF8");
?>
Bunları yaptıktan sonra Türkçe karakter problemiyle karşılaşmamanız gerekiyor… Ben böyle yapıyor ve hiç Türkçe karakter problemi ile karşılaşmıyorum.
karakter kodlaması, karakter sorunu, MySQL, PHP, phpMyAdmin, utf8
Yazacağım tüm yazıları RSS beslemesi ile takip edebilirsiniz
E-posta abonesi olarak yazacağım yazıların e-posta adresinize otomatik olarak gelmesini sağlayabilirsiniz.
Yazıyı başkalarıyla paylaşabilirsiniz;
Arşiv sayfasından tüm yazılarımı görebilirsiniz.
Yazıya yorum yapabilir, yapılan yorumları RSS 2.0 beslemesiyle takip edebilirsiniz veya sitenizden geri izleme yapabilirsiniz.
Web teknolojilerini takip etmeyi çok seven, genellikle en sevdiği programlama dili olan php ve onun kankası MySQL hakkında yazılar yazan, internet sitelerinde neXus veya nXs olarak tanınan Hüseyin Berberoğlu adlı kişinin web günlüğündesiniz… ayrıntı..
oyyla.com
Ekim 11th, 2007 at 17:01
PHP+MySQL’de Türçe Karakter Problemini Önlemek
Bu yazıda PHP ve MySQL ile site oluştururken Türkçe karakter problemi ile karşılaşmamak için yapılması gerekenler anlatılıyor..
serhat k
Ekim 27th, 2007 at 01:25
hocam dediklerini yaptım ama nafile.hala aynı durum.depolama ayarında sorun olabilir mi? bende MyIsam seçili InnoDb falan mı seçsem?
Hüseyin Berberoğlu
Ekim 28th, 2007 at 14:51
myisam ile alakalı olacağını sanmam.. sanırım sizde Türkçe karakter problemi oluşmuş. Bu yazıda Türkçe karakter problemi yaşamamak için önceden yapmanız gerekenleri yazdım..
ne tür bir problem yaşadığınızı daha ayrıntılı söylermisiniz ? mysql’deki tüm alanlarınızın karakter setleri türkçe karakter destekliyor mu ? html dosyanızın karakter seti doğru ayarlanmış mı ?
serhat k
Ekim 28th, 2007 at 15:41
sorun çözüldü.veritabanını üretirken karşılaştırma bilgisini utf8_unicode_ci yaptım sonra bunu tabloyu üretirken de kullandım.Yani tablo karşılaştırma bilgisi için de aynı karakter setini kullandım.şu ş ler ve ç ler ve ı lar sayfamda cirit atıyor oh be:D
Hüseyin Berberoğlu
Ekim 29th, 2007 at 02:08
sorunun çözüldüğüne sevindim
Psblog.oRg V1
Ocak 2nd, 2008 at 00:48
[...]
Uğur SAMSA
Ocak 2nd, 2008 at 00:57
işin içine girince çok faydalı bir yazı olduğunu anladım
Teşekkürler Hüseyin.
mümin (mimi)
Ocak 25th, 2008 at 18:33
benimde işimi kolaylaştırdı bu yazı. sürekli yaşadığım bir sorundu bu. teşekkürler
Umut
Şubat 20th, 2008 at 15:58
Filtreleme olaylarında sorun yaşıyorum, sistem aynı sizin anlatmış olduğunuz şekilde. Mesela “İ” ile başlayan kayıtları getirmek istediğimde (alan_adi LIKE ‘İ%’) şeklinde yapılan sorgularda sorun oluşuyor.İ% boş dönerken I% da İ ile başlayanlar dönüyor. Collation doğru ayarlandı. URL den gönderiyorum harfleri,orada Türkçe karakterler sorunlu, encode edilmiş olarak çıkıyordu, onları utf8 enco edip post etmeyi denedim o da işe yaramadı, bilmem nerede hata yapıyoruz?
Hüseyin Berberoğlu
Şubat 20th, 2008 at 16:05
utf8_general_ci yerine utf8_turkish_ci yi deneyin. post ile gönderme imkanınız varsa post ile göndermeyi deneyin.
yazdığınız sorguyu phpmyadmin kullanarak çalıştırıp denediniz mi ? orada bir sonuç çıkıyor mu ? İ% gibi yazdığınızda
Umut
Şubat 20th, 2008 at 16:56
@neXuS
Adınızla proje adının nerdeyse aynı olması ne büyük rastlantı aşağıdaki adrese bakabilirseniz sevinirim..
http://www.nexusartline.com/component/option,com_nexus/Itemid,67/lang,tr/
Hüseyin Berberoğlu
Şubat 20th, 2008 at 22:38
sizin için bir deneme yaptım, bir tablodaki alana İstanbul Istanbul istanbul ıstanbul gibi veriler girdim,
SELECT * FROM tablo WHERE alan LIKE ‘İ%’
SELECT * FROM tablo WHERE alan LIKE ‘i%’
SELECT * FROM tablo WHERE alan LIKE ‘I%’
SELECT * FROM tablo WHERE alan LIKE ‘ı%’
sorgularının hepsi doğru sonuç verdi.. Karşılaştırma olarak utf8_turkish_ci kullanıyorum.
Hem tablolarınızın hem de phpmyadmin deki “Yapı” bölümündeki alanlarınızın özelliklerindeki “Karşılaştırma”ların utf8_turkish_ci olduğunu kontrol edin. bazen alanların karşılaştırmasını düzeltmeyi unutabiliyoruz.
sadece verdiğiniz linke bakınca sorun şu gibi gözüküyor : urlde “letter,%C4%B0″ gibi bir şeyin oluşması, sorgunun da LIKE ‘%C4%B0%’ gibi olabileceği.. sanırım decode ederken problem çıkıyor.. o bölümün kodlarını da görsem başka bir çözüm belki söyleyebilirim
sercan
Eylül 12th, 2008 at 23:57
eline sağlık.. işe yarıyor
Sercan
Eylül 22nd, 2008 at 12:28
Hüseyin Bey merhabalar,
Uzun uğraşlar sonucu halledemediğim problemi sayenizde çözdüm. Çok teşekkür ederim
İyi çalışmalar.
Sercan