Tam o sırada, başka bir pillinetwork sitesi olan 10marifet.org'da: "Tavus kuşu modası"


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

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...

PrOgRaMmEr | 22 Mayıs 2008 16:10

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

php'de ob_iconv_handler'ı öneririm size
ajax çağrılarındaki utf8 sorunu için en başarılı çözümdür.

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...

PrOgRaMmEr | 23 Mayıs 2008 12:05

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

bekara ev yok kardeşim!!!

2008'de echo "şçğ"; diyemiyorsak vay halimize

@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.

üye olunpillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.

Bu Yazıyı Tutanlar

Beğendiğiniz bir yazıya "tuttum" demek için başlığın yanındaki yıldıza tıklayabilirsiniz.

Bu yazıyı rapor et. Kural dışı içeriğe rastladığınızda editörlerimize rapor ederek müdahale edilmesini sağlayabilirsiniz. (Hangi durumlarda rapor edebilirim?)
bildirgec.org bölümleri
pillinetwork hesabınızla giriş yapın.

pilli ilan

son yorumlar

pilli ilan

Tutulanlar Banner

bildirgecinfo

bildirgec.org içeriği kullanıcıları tarafından üretilen kolektif bir blogdur.