Merhaba, amacim sizin arastirmadan soru sordugunuzu dile getirmek filan degildi. Bu sekilde bir dusuncem olmadi. Sadece bu konuda uzun zamandir sorun yasadiginizi ve bir yerlerde gozden kacirdiginiz birseyler olabilecegini vurgulamak istedim.
karakter set olayi temelde birkac basligi olan bir konu. Bunun php veya bir programlama dili ile dogrudan iliskisi yok. Veriyi saklarken karakter set belirlersiniz, birde gosterirken. Eger saklarken karakter set UTF8 olsun der sonra gosterirken farkli bir set olsun derseniz o zaman bunu ya db sunucunuzun donusturmesi ya da uygulama tarafinda sizin donusturmeniz gerekir. UTF-8 temelde ingilizcede olmayan karakterlerin kullanilmasi icin gelistirilmistir. Siz "A" yazdiginizda bu "A" olarak 1 byte olarak saklanir. Ancak "Ğ" yazmak istediginizde bu iki byte uzunlugunda bir karakter olarak saklanir. UTF-8 bircok dili ayni anda iceren genis bir settir. Bu nedenle sadece turkce kullanilacak bir proje icin eger db boyutu onemli ise (diyelim ki 10 TB veri saklamak gerekiyor) o zaman sadece o dile has olusturulmus karakter set ile veri kaydedilebilir. Ornegin Latin5 (ISO-8859-9). Bunda durum utf-8 gibi degildir. Tum set sadece turkce karakterleri icerir diyelim. Buna gore siz veritabaninizda (mysql icin) tum tablolarinizi veya her field icin ayri ayri dil seti kullanabilirsiniz. Ancak latin1 (isvecce) setindeki bir tabloya turkce karakter basarsaniz o zaman db ile kulahlari degisirsiniz. Burada muhim olan ikinci nokta devreye girer. O da veritabanindan saklandigi formattaki veriyi hangi set olarak isteyeceginizdir. Mysql default olarak latin1 kabul eder (hala oyle mi bilemiyorum). Bunun anlami client tarafinda (php olabilir baska bir client olabilir) veri cekilecegi zaman mysql veriyi client default karakter setine gore gondermek istemesidir. Eger siz mysql konfigurasyonunda global olarak benim client'larimin karakter setleri latin5 derseniz, sakladigi veri utf-8 ise veriyi latin5 olarak cevirip gondermek ister. Arada japon karakteri varsa hata alirsiniz (mi emin degilim belki warning donuyordur ya da o karakterleri atlayarak gonderiyordur bilemeyecegim. pg tarafinda error alirsiniz.) Birde ikinci yontem olarak client db sunucuya kendi karakter setinin ne oldugu bilgisini gonderir ve veriyi ona gore hazirlamasinin talimatini verir. set name muhabbeti budur. Buna gore sizin client tarafinda da iki konu onem arzeder. Uygulama kodlarinizin icerisindeki ekrana basilacak kisim hangi dilde kayededilmis ise taryiciya sayfanin karakter setinin de o oldugunu bildirmeniz gerekir. Ornegin. veri_goster.php dosyaniz icerisinde kodlama yaparken, editor-ide her ne kullaniyorsaniz, kaydetme islemini utf8 yaptiniz. sonra html meta tag ve header'da karakter set olarak utf8 yazdiniz.bu php dosya icerisinde echo "merhaba TÜRKİYE"; yazdiniz ve altina da veritabanindan gelen bir veriyi basmak istediniz. Eger db'de sakladiginiz veri latin5, db global degiskenleri icerisinde client encoding latin5 ise ve siz kodunuzda "set name" ile herhangi bir encoding belirtmemis iseniz bu durumda ekrana basacaginiz veride echo ile yazdiginiz kisim normal gorunecek ama veritabanindan gelen kisim bozuk gorunecektir. Tarayiciya header ve meta tag (explorer meta tag baz alir, firefox header) olarak belirttigininiz karakter set iso-8859-9 yani turkce ise bu durumda veritabanindan gelen bilgi dogru gorunecek, echo ile yazdiginiz bilgi bozuk gorunecektir. Yazim yanlisi filan varsa kusura bakmayin. yeniden okumadan gonderiyorum :) On Tue, 2012-02-21 at 10:15 +0200, Nuri AKMAN wrote: > Merhaba Atıf Bey, > > Zaman zaman karşıma çıkan bu karakterset konusunu Google ve sizlerin > desteği ile çözme gayretindeyim. > > Google'da php mysql utf8 encoding problem araması yaptığımda, > google'ın 1 milyondan fazla sonuç bulduğunu gördüm. Sanırım sizin > tespit ettiğiniz mesajlar da bu rakama dahil :) > > Keşke tüm sorunlar sadece bir doküman okunduğunda çözülebilecek kadar > kolay olsaydı da, biz programcılar anlamsız sorunlar için google > araması yapmakta geçen zamanımızı sosyal etkinliklerde kullanabilsek! > > Son olarak; Sadece bu konuda değil, her konuda elimden geldiğince > araştırma yapmaya çalışıyorum. Çoğu zaman çözüme ulaşıyorum. Neticeye > varamayınca da listedeki üstadlara başvuruyorum. > > Selamlar, > Nuri Akman > > > > 2012/2/20 Atıf CEYLAN <[email protected]> > > Sayin Nuri Hocam, > Ben sizin ile karakter set olayini o kadar ozdeslestirmisim > ki, ufak bir google arastirmasi yaptim ve netice itibari ile > karakter set olayini basli basina bir arastirma konusu > yapmanizi oneriyorum. > > 2011 17 mayis'ta bir arkadas > > > > Listelerden takip ettiğim kadarı ile bir süredir karakter seti ile > > ilgili sorun yaşıyorsunuz. > > > > Aslında defalarca yaşadığınız sorunu çözen yanıtlar aldınız ancak > > sanıyorum bir noktada bir şeyler yanlış gidiyor. > > > seklinde baslayan bir mail yazmis, > > 2009 kasim 24'te yine benzer bir soru sormussunuz ve yine ayni > konu etrafina bir suru arkadas yazmis. > > > Arkadaşlar, > > > > MySQL database'de Latin5 olarak oluşturulmuş bir tablom var. Bu > > tablodaki verileri UTF-8 formatlı bir PHP dosyamda kullanmka > istediğimde > > TR karakterler bozuk geliyor. Dosyanın UTF-8 olan türünü ANSI > yapınca da > > ekrandaki diğer yazılar bozuluyor. > > > > Bu sorunu MySQL'deki tablomu UTF-8'e çevirmeden çözebileceğim bir > metod > > var mıdır? > > > > Selamlar, > > Nuri Akman > > > Acikcasi bu konuyu cidden arastirmanizi oneriyorum. > > > > -- > > /** > * @author Atıf CEYLAN > * Software Developer & System Admin > * http://www.atifceylan.com > */ > > > _______________________________________________ > Linux-programlama mailing list > [email protected] > https://liste.linux.org.tr/mailman/listinfo/linux-programlama > Liste kurallari: http://liste.linux.org.tr/kurallar.php > > > > > _______________________________________________ > Linux-programlama mailing list > [email protected] > https://liste.linux.org.tr/mailman/listinfo/linux-programlama > Liste kurallari: http://liste.linux.org.tr/kurallar.php -- /** * @author Atıf CEYLAN * Software Developer & System Admin * http://www.atifceylan.com */
_______________________________________________ Linux-programlama mailing list [email protected] https://liste.linux.org.tr/mailman/listinfo/linux-programlama Liste kurallari: http://liste.linux.org.tr/kurallar.php
