Monday, July 16, 2007

Ajax uygulamalarında Türkçe karakter sorunu

Ajax uygulamalarında Türkçe karakter sorunun çözümü için çoğumuz arayış içerisine girmişizdir. Bu sorunun çözüm yollarını kısaca burada açıklamaya çalışacağım.


Ajax uygulamalarında çıktı ya da veri alış verişi, text/xml içerik türüne göre gerçekleşmektedir. Bu veri, alış veriş biçiminde varsayılan karakter tip tanımlaması ISO-8859-1 ve UTF-8 göre yapılmaktadır.Türkçe karakter problemi, ekrana yazılan yazılar ve veritabanına eklenen bilgilerde kendisini göstermekte ve çoğu kişi için problem oluşturmaktadır.


Ben burada bu çözümü, genel olarak PHP için nasıl aşılacağını yazacağım.


Çözüm:


Eğer sadece herhangi bir text ya da HTML içerikli bir sayfadan bilgi alınacaksa (PHP değil) çözüm bu sayfaların kayıt biçimini UTF-8 yaparak aşabiliriz.


Örneğin windows bilgisayarlarda farklı kaydet penceresinde iken kodlama türünü utf-8 seçtikten sonra sayfa kaydedilirse Ajax ile çalışmalarınızda türkçe karekter sorunu yaşamamış olursunuz.


PHP Programlarında


PHP Programlarında header() fonksiyonu text/xml ve karekter seti UTF-8 ile tanımlandığında ekrana yazdırılan bilgilerde türkçe karekter problemi ortadan kalkmaktadır.

Örneğin:

PHP programının en başına


<?php

header("Content-Type: text/xml; charset=utf-8");

?>


yazarak problemi ortadan kaldırmış oluruz.


Eğer bilgileri veritabanına yazdıracak iseniz bu durumda hiçbirşey yapmadığınız taktirde bilgiler UTF-8 olarak kaydedilecetir. UTF-8 olarak eklen bilgiler bir çok programcı için problem olamayabilir ama eğer UTF-8 olarak kaydedilmesin isteniyorsa bu durumda aşağıdaki PHP fonksiyonu bu işi yapacaktır.


Örneğin: iconv() fonksiyonu bu işi yapıyor. Nasılmı?


diyelimki formdaki adsoyad alanından bilgiyi veritabanına kaydedeceksin ama UTF-8 değilde ISO-8859-9 olarak kaydetmek istiyorsun o zaman fonksiyonu şöyle düzenlediğinde UTF-8 olarak gelen bilgi ISO-8859-9 dönüştürülüyor.




örnek veritabanı ekleme için şöyle olabilir.Denedim ve sonuç tam olarak gerçekleşiyor.




PHP Kodu:

<?

$link=@mysql_connect("localhost", "root", "1234") or die('Erişim hatası: ' . mysql_error());


$vt=mysql_select_db("denek") or die ('Veritabanı hatası : '. mysql_error());


$sorgu="INSERT INTO deneme(adi) VALUES('$post')";

$sorgula=mysql_query($sorgu) or trigger_error(mysql_error(),E_USER_ERROR);


echo "Tamam";


?>




Bu tarz problemi olan arkadaşlar iconv() fonksiyonundan yararlanabilirler.




Bunun terside mümkün yani diyelim veritabanındaki bilgiler UTF-8 ama siz bunu

ISO-8859-9 çevirmek istiyorsunuz ozaman yine aynı fonksiyon kullanılabilir.

No comments: