Türkçe karakter problemi, her alanda başımızı ağrıtırken, özellikle Ajax ile uğraşanların baş belası durumundadır. Sorunun çözümünde karakter çevrimi, iconv gibi vs. çeşitli yöntemler kullanmış biri olarak kesin çözüm her yerde UTF8 kullanmaktır diyebilirim.
Ama iso dan utf8e geçmek bir sürü iş diyen çıkabilir. Ben de demiştim zamanında. İşte çözümler. Ben çektim siz çekmeyin.
1- Veri tabanı bağlantısında UTF8 Kullanın.
Eğer verileriniz mevcutsa ve önceden bir şekilde LATIN5 ile kaydedilmiş verilere erişim sağlayacaksanız,
SET NAMES utf8;
SET CHARACTER_SET utf8;
Komutu ile bağlantınızı utf8e çevirebilirsiniz. Böylece veri tabanında karakterin nasıl kaydedildiğine bakmaksızın, istediğiniz kodlama ile sonuçlar alırsınız. Detay (http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html)
2- Dosyaları yazarken UTF8 kodlamasıyla kaydedin
Farklı karakter kodlamalarına izin veren editörler kullanın. Örneğin PHPed kullanın.
Sistem default olarak Tools-> Settings -> Default File Encoding i değiştirin. Dosya açılırken kodlamayı seçin yada sağ alt köşede bulunan dil kodlamasını tıklayın.
Önceden hep latin5 çalışıyor idiyseniz de artık utf8 çalışacaksanız ve bir çok dosyaya sahipseniz bunları otomatik olarak değiştirmek için bir program kullanmaya ihtiyacınız olabilir. (Aslında dosyaları tek tek açıp farklı kaydet ile çözebilirseniz ama çok dosya varsa problem tabi) Otomatik olarak verdiğiniz dizindeki tüm dosyaları utf8 e çeviren program var. Uni2Me (http://alf-li.pcdiscuss.com/) Burdan direk indirebilirsiniz. Kuruluma gerek kalmıyor çok basit ve kullanışlı bir program. Ama benim işlerim çok alengirli diyenler için başka alternatifler de mevcut tabi
3- Sayfanın karakter kodlaması UTF olsun.
Bunu da iki şekilde sağlayın.
a- meta tag yazın.
META http-equiv="Content-Type" content="text/html; charset=utf-8"
b- php header belirtin.
header('Content-Type: text/html; charset=utf-8');
Böylelikle kullanıcı browserı da utf8 i seçmiş olsun.
Neden ille de ut8i kullanın diyorum da bir takım çevirici işlemleri yetersiz görüyorum.
Çünkü ;
1- ajax iletişimi utf8 üzerinden gerçekleşiyor
2- json sistemi ancak utf8 ile çalışıyor (json_encode, json_decode $.parseJSON $.toJSON hepsi)
3- fck gibi editörler çok ciddi problemler çıkarabiliyor.
4- verilerin bir kısmı utf8 bir kısmı latin5 olunca sürekli çevirimlerle efor kaybediliyor. Hem yazılım performansı hem de yazılımcının sinir katsayısı...
- ikuzgun
- 11 yorum var
- 22 Mayıs 2008 14:31
« önceki yazı After Effects'e Yer Açın |
sonraki yazı » paranın değerini anla (euro, dolar ve yen) |
Yorumlar
şimdi şöyle bişey var ISO 8859-9 dan UTF - 8 e geçmek gerçekten zor oluyor :S
Meta tag ı UTF 8 yapmama rağmen düzelmeyen bir sorun haline geldi benim için ajax türkçe karater sorunu :S DB vs işlemim yok basit bi şekilde html lod ediyorum sayfanın içerisine yinede türkçe karakterlerim sorun çıkarıyor. Bunun kesin tam çözümü yokmudur arkdaşlar çünkü aynı ajax sistemi evimde kurulu server 2003 localhost üzerinde hiç bir sıkıntı yapmadan çalışıyor :S Ajaxta yeni olduğum için bi çözüm uyduramadım :S günlerdir kafa çatlatıyorum diyebilirim :S
Yazı için teşekkürler...
gerçekten güzel olmuş. bende ilk başlarda utf-8'e dikkat etmiyordum fakat proje tesliminden önce başımı yaktığı için çok uğraştırdı. Veritabanındaki bilgileri tekrar yazmak zorunda kaldım :D tüm dosyaları ve veritabanını utf-8 yapınca sorun çözüldü. Teşekkürler
çok başarılı olmuş, ben de iso 8859-9'dan utf-8'e dönme çalışmalarına başlayayım.
Sonradan değiştirme olayına katılmıyorum bir çok sorun cıkıyor. dediklerini yapsak bile yine cıkar yine cıkar.onun için bir site hazırlamaya başlamadan önce iso mu yoksa utf8 mi olacağına karar verin. her sorgudan önce karakter kodlamasını iso veya utf8 yapın iconv leri unutmayın sorun kalmaz. başka yolu yok...
şimdi şöyle bir durum var UTF-8 de istediğimiz karakterleri görüntüleyebilsek bile bizim dilimizin karakterleri efektif olarak yok UTF-8 içerisinde anca UTF-8 olarak karşılıklarına encode edildiğinde browser bunu ş ğ gibi gösterebiliyor sanıldığı gibi UTF-8 eğer Türkçe karakter desteklemiş olsaydı tıpkı "c" nin karşılığı "c" olduğu gibi "ç" nin karşılığıda "& #231;" değil "ç"; "ş" nin karşılığı "& #351;" değil "ş" olurdu arkadaşlar ve bu teknik açıdan kısmen çözüm dahi olsa aslında dil açısından çözüm değildir bana göre ve gelecekte oluşabilecek taşınma geliştirme ve değişimlerde büyük sıkıntı olacağı açıktır kaldı ki UTF-8 size Türkçe kodlama yapma imkanı vermiyor ne yazıkkı yani.
echo "şçğ"; //diyemiyoruz
?>
echo "& #351;& #231;& #287;"; // demek durumunda kalıyoruz ki bu da pratik kodlamayı engelliyor bence...
?>
Php için
Ben şöyle çözdüm db e yazma işleminde denememe karşın file load db den veri çekme gibi işlemlerde ajax ile muhattab .php nin header bilgisini değişdirdiğimizde bu sorun çözülüyor dikkat edersek header bilgisini index.php de değil ajax ve db ile direkt muhattab olan .php de değiştiriyoruz ve sorunumuz çözülüyor post işleminde işe yararmı bilemiyorum denemek lazım....
/*
header("Content-Type: text/html; charset=iso-8859-9");
*/
İyi günler...
ne ilginçtir UTF8 kullanırken hiçbir yerde TR karakter sorunu yaşamazken jQuery ile yürüyen ve sonuç olarak json veren bir Ajax talebinde php5 in json_encode fonksiyonu verilerdeki TR karakterleri tahrip ediyor. Giren veri UTF8 çıkan veri UTF8 neden böyle oluyor bilemiyorum. Sorunu harici json classı kullanarak çözdüm ama native bir fonksiyon varken harici class kullanmak sinir bozucu bir durum :S
@progammer, bir konuda yanılıyorsun:
utf-8 ile Türkçe karakterlerin html özel karakter kodlarına dönüştürülmesi gibi bir durum sözkonusu değil, o daha çok kullanılan editörün yaptığı bir iştir.
utf-8 standart ascii tablosunda olmayan karakterleri saklamak için 2 adet ascii karakteri kullanır. tabi anlayacağınız üzere ascii tablosunda olan karakterler için o karakterlerin kendisini kullanır...
sizin de deneyebileceğiniz bir örnek vereyim:
not defterini veya utf-8 destekleyen başka bir editörü açın Türkçe'ye özel karakterler kullandığınız bir metin girin. kaydederken utf-8'i seçmeyi unutmayın.
daha sonra dosyanızı utf-8 desteklemeyen! bir editörde veya web gezginizde açın. eğer web gezginizde açarsanız karakter kodlamasını utf-8'den ansi'ye veya iso-8859-9'a alın. göreceğiniz gibi Türkçe özel karakterler 2 karakter ile değişmiş görünüyorlar... & #351; gibi html karşılıklarına değil.
mesela ben alfabemizi çevirdim:
iso-8859-9 hali:
ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ
abcçdefgğhıijklmnoöprsştuüvyz
utf-8 halinin ansi versiyonu:
ABC�DEFG�HIİJKLMNO�PRS�TU�VYZ
abcçdefg�hıijklmnoöprs�tuüvyz
jquery grubunda karakter kodlaması ile ilgili bir soru üzerine cevap hazırlamayı düşünüyordum ki, bu konuda insanların sıkıntı çektiğini bildiğim için yazıyı bildirgecte yayınlamak istedim. Teveccüh bekliyordum ama bu kadar tutulmasını ve yorum yazılmasını da beklemiyordum açıkçası. ilginize teşekkür ederim.
bazı yorumlarda sorulan sorulara cevap vermeye çalışayım.
@eburhan, sizin yazılarınızın yanında solda kalır.
@PrOgRaMmEr, utf8 e geçmek, iki arada bir derede kalmaktan çok daha kolay inan ki. Ben de aylarca bu konuda sıkıntı çekmiştim. Oradan biliyorum. Yukarıda bulunan 3 maddeyi uygularsan sorun kalmayacaktır. Sorunun ne olduğunu Mail atarsan bireysel bir çözüm sunabilirim belki.
@orhanveli firik, evet json_encode türkçe karakterleri tahrip ediyor ancak gösterim olarak sorun çıkarmıyor. harici JSON classı kullanmak problemini çözdüyse, muhtemelen fonksyona soktuğun string değeri hala utf8 değildir. Veri tabanından çektiğin karakter kodlamasında utf8 kullandığına emin ol bence.
Ben JSON classını kullanıyorum ama if(function_exist) ile kontrol ediyorum eğer json_encode tanımlı değilse tanım yapıyorum. Pratik kullanım sunuyor. Çünkü eğer test ederseniz, php 5.2.0 ile gelen json_encode ve json_decode, o class dan yaklaşık 20 kat hızlı çalışıyor :)
@ncankirik, sen de haklısın.
pillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.
İlgili Yazılar
- Aptana Studio 1.0 (9)
- 70'den fazla JavaScript kaynağı (1)
- ajaxorized (2)
- Ajax ve javaScript tabanlı fotoğraf galerileri (20)
- PHPAjax Upload Progress (1)
- php tabanlı, üzeri ajax ile süslenmiş sözlük sc... (10)
- MODx CMS - Ajax/PHP destekli içerik yönetim sis... (3)
- protolize (0)
- Aptana: The Web IDE (2)
Bu Yazıyı Tutanlar
Beğendiğiniz bir yazıya "tuttum" demek için başlığın yanındaki yıldıza tıklayabilirsiniz.

