• Forum vBulletin altyapısından Xenforo altyapısına geçirildi, bu sebeple eski şifreleriniz ile foruma giriş yapamayacaksınız, parolamı unuttum adımından mailiniz ile şifre sıfırlayarak giriş yapabilirsiniz.

    Üyeliklerinde geçerli bir mail adresi olmadığı için sıfırlama yapamayacak kullanıcılar forum kullanıcı adlarını ve yeni şifrelerini yazarak info@maxigame.org adresine şifre sıfırlamak istediklerine dair bir mail göndersinler şifrelerini sıfırlayıp mail adreslerini güncelleyeceğiz. Şifreniz sıfırlandıktan sonra foruma giriş yapıp tekrar istediğiniz gibi değiştirebilirsiniz.

Ajax ile Karşılaşılacak Türkçe Karakter Sorununun Çözümleri

Angelina

O Şimdi Asker
Aileden
Aktiflik
K.Tarihi
6 May 2009
Mesajlar
1,158
Puanı
442
Konum
Valentine
55s80.jpg





Kolay gelsin arkadaşlar.Daha öncede düşündüğüm "çözümlerin toplu listesinin olması" gerçektende kolaylık sağlayacaktır.Ben 6 tane yol çıkarabildim çözüm için.Ama belki sizin bir tanesini yapmanız bile yetecektir.Benim karşılaştığım en ilginç sorun: "php" kullanırken header("content-type...") kullanırken daha önceki projede Türkçe karakter olayını çözüp dün denediğimde çözülmememesi.Nasıl olur diye sorarsanız bilmiyorum Ama bu sorunun birden fazla çözümü olduğu kesindir.Toparlamaya çalıştım bunları."PHP" ile uğraştığım için header() komutunun asp,asp.net de veya herhangi bilr dilde karşılığını bilen arkadaşlar yazarlarsa güzel olur.

Adımlar şöyle

  1. Veritabanı karakter seti
  2. Dosya karakter seti
  3. Çıktı dosyasının(.html) karakter seti
  4. Ajax kütüphanesinin karakter setinin UTF-8 den ISO ya çevrilmesi
  5. Çıktı sayfasının karakter setinin script-dili ile belirlenmesi
  6. php-iconv çözümü

Aşağı yukarı böyle sıralanabilir.Adım adım anlatayım.

Adım 1:Veritabanı karakter setlerinden içinden Türkçe karakterler olanını seçmeniz önemli.utf8_turkish_ci,utf8_turkish_ci_turkish_ci gibi.Bunun ardından Şu kısımda önemli asıl SQL cümlesini çalıştırmadan önce şu komutu çalıtırmanız lâzım ("set names utf8_turkish_ci").utf8_turkish_ci yerine Türkçe karakter olan bir set de seçebilirsiniz.
Adım2:Üzerinde çalıştığınız dosyanın(index.php-index.asp) karakter setini değiştirebilirsiniz.Bunu için not defteri farklı kaydet ansi->utf-8 yapabilirsiniz.Ya da kullandığınız editörün karakter setini değiştirme özelliğini kullanabilirsiniz.Yalnız bu işlem sayfanızdaki Türkçe karakterlerin abulmasına sebep olacaktır.Ama sonuç olarak sorun çözülebilir.
Adım 3:Çıktı verdiğiniz sayfanın karakter setinde de sorun çıkmış olabilir.Bunu için <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-9"/> yazmanız yeterlidir.
Adım 4:Daha dün öğrendiğim ama daha öncede gözüme çarpan xmlhttprequest nesnesinin setrequestheader özelliğini iso yapmanızdır.Bunun örneğini aşağıda vereceğim.Ajax'ın nasıl kullanıldığını anlatırken.
Adım 5:Çıktı dosyasının başlığını bir şekilde belirlemeniz önemli content=utf8_turkish_ci.Bunu script-dili ilede yapabilirsiniz."PHP" de örneğini göstereyim.header("content-type:text/html; charset=utf8_turkish_ci"); şeklinde halledebilirsiniz.Diğer dillerde arkadaşlar gösterirlerse gerçekten güzel olur.
Adım 6:Bu biraz spesifik kalabilir.Ama mantığını söyleyim ki diğer s-dilinde bilen arkadaşlar varsa not düşebilirler."PHP" ile bir metnin karakter kodlamasını değiştirebiliyoruz.bunu iconv ile yapabiliyoruz.Örnek olarak $metin=iconv("ISO-8859-9","UTF-8",$metin);

Bu adımların hepsini tabikide sırayla yapmak zorunlu değilsiniz.Önemli olan 4.adım ile 3.adımın kesinlikle bulunmasıdır.Bu ikisiyle çözüme ulaşabilirsiniz.Ama olurya benim çektiğim gibi çok ilginç sıkıntılar çekerseniz diğer adımlarada göz atabilirsiniz.

Ajax Örneklerine geçeyim.Özellikle 4.Adımı göstereyim.


Kod:
[COLOR=#000000][COLOR=#007700]function [/COLOR][COLOR=#0000BB]ajax[/COLOR][COLOR=#007700]() 
{ 
    var [/COLOR][COLOR=#0000BB]xmlHttp[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]null[/COLOR][COLOR=#007700]; 
    try 
    { 
        [/COLOR][COLOR=#FF8000]// Firefox, Opera 8.0+, Safari 
        [/COLOR][COLOR=#0000BB]xmlHttp[/COLOR][COLOR=#007700]=new [/COLOR][COLOR=#0000BB]XMLHttpRequest[/COLOR][COLOR=#007700](); 
    } 
    catch ([/COLOR][COLOR=#0000BB]e[/COLOR][COLOR=#007700]) 
    { 
        [/COLOR][COLOR=#FF8000]// Internet Explorer 
        [/COLOR][COLOR=#007700]try 
        { 
            [/COLOR][COLOR=#0000BB]xmlHttp[/COLOR][COLOR=#007700]=new [/COLOR][COLOR=#0000BB]ActiveXObject[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]'Msxml2.XMLHTTP'[/COLOR][COLOR=#007700]); 
        } 
        catch ([/COLOR][COLOR=#0000BB]e[/COLOR][COLOR=#007700]) 
        { 
            [/COLOR][COLOR=#0000BB]xmlHttp[/COLOR][COLOR=#007700]=new [/COLOR][COLOR=#0000BB]ActiveXObject[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]'Microsoft.XMLHTTP'[/COLOR][COLOR=#007700]); 
        } 
    } 
    return [/COLOR][COLOR=#0000BB]xmlHttp[/COLOR][COLOR=#007700]; 
} 
function [/COLOR][COLOR=#0000BB]hazirla[/COLOR][COLOR=#007700]() 
{ 
       [/COLOR][COLOR=#0000BB]xmlHttp[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]ajax[/COLOR][COLOR=#007700](); 
       if ([/COLOR][COLOR=#0000BB]xmlHttp[/COLOR][COLOR=#007700]==[/COLOR][COLOR=#0000BB]null[/COLOR][COLOR=#007700]) 
       { 
        [/COLOR][COLOR=#0000BB]alert [/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]'Tarayıcınız Ajax Desteklemiyor!'[/COLOR][COLOR=#007700]); 
        return; 
    } 
    var [/COLOR][COLOR=#0000BB]baslik [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]document[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]getElementById[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]'haber_baslik'[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]value[/COLOR][COLOR=#007700]; 
    var [/COLOR][COLOR=#0000BB]icerik [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]document[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]getElementById[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]'haber_icerik'[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]value[/COLOR][COLOR=#007700]; 
    var [/COLOR][COLOR=#0000BB]url[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]'haber_ekle.php'[/COLOR][COLOR=#007700]; 
    var [/COLOR][COLOR=#0000BB]sc [/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]'haber_baslik='[/COLOR][COLOR=#007700]+[/COLOR][COLOR=#0000BB]baslik[/COLOR][COLOR=#007700]+[/COLOR][COLOR=#DD0000]'&haber_icerik='[/COLOR][COLOR=#007700]+[/COLOR][COLOR=#0000BB]icerik[/COLOR][COLOR=#007700]; 
    [/COLOR][COLOR=#0000BB]xmlHttp[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]open[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]'POST'[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]url[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]true[/COLOR][COLOR=#007700]); 
    [/COLOR][COLOR=#0000BB]xmlHttp[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]setRequestHeader[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]'If-Modified-Since'[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]'Sat, 1 Jan 2000 00:00:00 GMT'[/COLOR][COLOR=#007700]); 
    [/COLOR][COLOR=#0000BB]xmlHttp[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]setRequestHeader[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]'Content-Type'[/COLOR][COLOR=#007700],[/COLOR][COLOR=#DD0000]'application/x-www-form-urlencoded; charset=utf8_turkish_ci'[/COLOR][COLOR=#007700]); 
    [/COLOR][COLOR=#0000BB]xmlHttp[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]setRequestHeader[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]'Content-length'[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]sc[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]length[/COLOR][COLOR=#007700]); 
    [/COLOR][COLOR=#0000BB]xmlHttp[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]setRequestHeader[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]'Connection'[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]'close'[/COLOR][COLOR=#007700]); 
    [/COLOR][COLOR=#0000BB]xmlHttp[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]onreadystatechange[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]Guncelle[/COLOR][COLOR=#007700]; 
    [/COLOR][COLOR=#0000BB]xmlHttp[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]send[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]sc[/COLOR][COLOR=#007700]); 
  
} 
function [/COLOR][COLOR=#0000BB]Guncelle[/COLOR][COLOR=#007700]() 
{ 
    if ([/COLOR][COLOR=#0000BB]xmlHttp[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]readyState[/COLOR][COLOR=#007700]==[/COLOR][COLOR=#0000BB]4 [/COLOR][COLOR=#007700]&& [/COLOR][COLOR=#0000BB]xmlHttp[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]status [/COLOR][COLOR=#007700]== [/COLOR][COLOR=#0000BB]200[/COLOR][COLOR=#007700]) 
    { 
        [/COLOR][COLOR=#0000BB]document[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]getElementById[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]'sonuc'[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]innerHTML[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]xmlHttp[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]responseText[/COLOR][COLOR=#007700]; 
    } 
} 
[/COLOR][COLOR=#FF8000]/////////////////////ÜSTTEKİ KISIM POST İŞLEMİ YAPAR  [/COLOR][/COLOR]

Bu kısım POST işlemi içindir.Mantığını anlatayım ajax() fonksiyonu ile xmlhttprequest nesnesi oluşturuyoruz.Bu kadar uzun olmasının sebebi.IE nin kılçıklık yapmasıdır.hazirla() fonksiyonu ile xmlhttprequest nesnemizin içeriğini hazırlıyoruz.İşte burda sahneye şu komut çıkıyor xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=utf8_turkish_ci'); bununla ajax karakter seti belirliyoruz.Ve xmlhttp.send(sc) ile veriyi gönderiyoruz.Gönderdik tamam ama bunu kontrölü lâzım bunuda Guncelle() fonksiyonu ile yapıyoruz.Ve sonuc id li spanı veya divi güncelliyoruz.Bunların çalışması için ilk başta
ajax() fonksiyonu çalıştırıyoruz xmlhttp hazırlanmış oluyor ve haber ekleme işlemini tetikliyoruz haber_ekle() ile.Birde xmlhttprequest in durumunu readyState ile alabiliyoruz."4" bütün verinin aktarıldığını söylüyor bizde "4" e göre işlem yapıyoruz.GET metduda aynı mantıkla çalışır ondan onu geçiyorum ama kodları budur:

Kod:
[COLOR=#000000][COLOR=#007700]function [/COLOR][COLOR=#0000BB]requestOlustur[/COLOR][COLOR=#007700]() 
{ 
    var [/COLOR][COLOR=#0000BB]conn[/COLOR][COLOR=#007700]; 
    var [/COLOR][COLOR=#0000BB]browser [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]navigator[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]appName[/COLOR][COLOR=#007700]; 
    if([/COLOR][COLOR=#0000BB]browser [/COLOR][COLOR=#007700]== [/COLOR][COLOR=#DD0000]"Microsoft Internet Explorer"[/COLOR][COLOR=#007700]) 
    { 
        [/COLOR][COLOR=#0000BB]conn [/COLOR][COLOR=#007700]= new [/COLOR][COLOR=#0000BB]ActiveXObject[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"Microsoft.XMLHTTP"[/COLOR][COLOR=#007700]); 
    } 
    else 
    { 
        [/COLOR][COLOR=#0000BB]conn [/COLOR][COLOR=#007700]= new [/COLOR][COLOR=#0000BB]XMLHttpRequest[/COLOR][COLOR=#007700](); 
    } 
    return [/COLOR][COLOR=#0000BB]conn[/COLOR][COLOR=#007700]; 
} 
function [/COLOR][COLOR=#0000BB]requestGonder[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]kadi[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]sifre[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]oturum[/COLOR][COLOR=#007700]) 
{ 
    [/COLOR][COLOR=#0000BB]gonderilecekler[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]'ana_sayfa.php?yontem=ajax&kadi='[/COLOR][COLOR=#007700]+[/COLOR][COLOR=#0000BB]kadi[/COLOR][COLOR=#007700]+[/COLOR][COLOR=#DD0000]'&sifre='[/COLOR][COLOR=#007700]+[/COLOR][COLOR=#0000BB]sifre[/COLOR][COLOR=#007700]+[/COLOR][COLOR=#DD0000]'&oturum='[/COLOR][COLOR=#007700]+[/COLOR][COLOR=#0000BB]oturum[/COLOR][COLOR=#007700]; 
    [/COLOR][COLOR=#0000BB]http[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]open[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]'get'[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]gonderilecekler[/COLOR][COLOR=#007700]); 
    [/COLOR][COLOR=#0000BB]Http[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]setRequestHeader[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]'Content-Type'[/COLOR][COLOR=#007700],[/COLOR][COLOR=#DD0000]'application/x-www-form-urlencoded; charset=utf8_turkish_ci'[/COLOR][COLOR=#007700]); 
    [/COLOR][COLOR=#0000BB]http[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]onreadystatechange [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]handleResponse[/COLOR][COLOR=#007700]; 
    [/COLOR][COLOR=#0000BB]http[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]send[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]null[/COLOR][COLOR=#007700]); 
} 
function [/COLOR][COLOR=#0000BB]handleResponse[/COLOR][COLOR=#007700]() 
{ 
    if([/COLOR][COLOR=#0000BB]http[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]readyState [/COLOR][COLOR=#007700]== [/COLOR][COLOR=#0000BB]4[/COLOR][COLOR=#007700]) 
    { 
        var [/COLOR][COLOR=#0000BB]response [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]http[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]responseText[/COLOR][COLOR=#007700]; 
        [/COLOR][COLOR=#0000BB]document[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]getElementById[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]'bilgi'[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]innerHTML [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]http[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]responseText[/COLOR][COLOR=#007700]; 
        if([/COLOR][COLOR=#0000BB]http[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]responseText[/COLOR][COLOR=#007700]==[/COLOR][COLOR=#DD0000]'0'[/COLOR][COLOR=#007700]){ 
            [/COLOR][COLOR=#0000BB]document[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]getElementById[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]'bilgi'[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]innerHTML [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]'Girdiğiniz Kullanıcı adı veya Şifre yanlış'[/COLOR][COLOR=#007700]; 
        }else{ 
             [/COLOR][COLOR=#0000BB]document[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]getElementById[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]'bilgi'[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]innerHTML [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]'Hoş Geldin '[/COLOR][COLOR=#007700]+[/COLOR][COLOR=#0000BB]http[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]responseText[/COLOR][COLOR=#007700]; 
             [/COLOR][COLOR=#0000BB]yonbasla[/COLOR][COLOR=#007700](); 
        } 
    } 
} 
 
[/COLOR][COLOR=#FF8000]///ÜSTTEKİ AJAX GET METODUDUR  [/COLOR][/COLOR]

Ve Sırada Jquery var bu kod yığınından sonra size bir ferahlık getirecek.Jquery süper bir Framework dür.Kullanımı tavsiye ederim.Javascript öğrenmeye getElementById ile başladıktan sonra(temel değişkenleri ve bilgileri bildiğimizi varsayarak) jquery ye geçiş yapabiliriz.
Jquery ile de şöyledir.

Kod:
[COLOR=#000000][COLOR=#007700]var [/COLOR][COLOR=#0000BB]veri[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]"kullanici=mrsb&sifre=44&degisken=varsa daha böyle böyle ekliyoruz"[/COLOR][COLOR=#007700]; 
var [/COLOR][COLOR=#0000BB]ajax_url[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]"mesela.php"[/COLOR][COLOR=#007700]; 
$.[/COLOR][COLOR=#0000BB]ajax[/COLOR][COLOR=#007700]({ 
        [/COLOR][COLOR=#0000BB]data[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]veri[/COLOR][COLOR=#007700], 
        [/COLOR][COLOR=#0000BB]type[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#DD0000]"POST"[/COLOR][COLOR=#007700], 
        [/COLOR][COLOR=#0000BB]url[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]ajax_url[/COLOR][COLOR=#007700], 
        [/COLOR][COLOR=#0000BB]timeout[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]20000[/COLOR][COLOR=#007700], 
        [/COLOR][COLOR=#0000BB]contentType[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#DD0000]"application/x-www-form-urlencoded;charset=ISO-8859-9"[/COLOR][COLOR=#007700], 
        [/COLOR][COLOR=#0000BB]success[/COLOR][COLOR=#007700]: function([/COLOR][COLOR=#0000BB]e[/COLOR][COLOR=#007700]){[/COLOR][COLOR=#FF8000]//Buraya kod gelecek} 
[/COLOR][COLOR=#007700]}); 
[/COLOR][COLOR=#0000BB]ÜSTTEKİ JQUERY POST VEYA GET METODU İÇİN GEÇERLİDİR[/COLOR][COLOR=#007700].  [/COLOR][/COLOR]

success - bizim 4 e karşılık geliyor az çok hata oluşmaz da her şey doğru çalışırsa çalışıyor.Eğer hata olursa error çalışıyor.
Bunu <script type="text/javascript" src="jquerydosyasınınyeri.js"></script>
şeklinde kütüphaneyi eklemeniz karşılığında kullanabilirsiniz
 
Ajax ajax :D
Sezer bendede bi script var php den anlıyorsun sanırsam kuramadım bir türlü bi yardım edermisin.
 
Geri
Üst