+ Yanıtla
Toplam 6 sonuçtan 1 ile 6 arası olanlar

Konu Başlığı: Ajax turkçe karakter problemi

  1. #1

    Ajax turkçe karakter problemi

    Merhabalar,

    ajax ile basit bir uygulama yapmaya calisiyorum. sadece HTML dosyalarını kullanarak yapacagim bir uygulama. HTML sayfalarını yuklerken turkce karakterlerde problem yaratıyor. bunu çözebilen ya da çözümünü bilen var mi?

    Alternatif çözümler var. sayfadaki kodların ascii karakterini yazmak ve sayfa yüklenince tekrar türkçe karakterlere dönüştürmek gibi. Ancak veritabanı uygulmasında bunu yapmak çok zor. Bu nedenle js dosyasında çözmek mantıklı geldi.

    Şimdiden teşekürler..

    Dynamic Drive'dan aldım bu kodu: ajax.js


    var loadedobjects=""
    var rootdomain="http://"+window.location.hostname

    function ajaxpage(url, containerid){
    var page_request = false
    if (window.XMLHttpRequest) // if Mozilla, Safari etc
    page_request = new XMLHttpRequest()
    else if (window.ActiveXObject){ // if IE
    try {
    page_request = new ActiveXObject("Msxml2.XMLHTTP")
    }
    catch (e){
    try{
    page_request = new ActiveXObject("Microsoft.XMLHTTP")
    }
    catch (e){}
    }
    }
    else
    return false
    page_request.onreadystatechange=function(){
    loadpage(page_request, containerid)
    }
    page_request.open('GET', url, true)
    page_request.send(null)
    }

    function loadpage(page_request, containerid){
    if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
    document.getElementById(containerid).innerHTML=pag e_request.responseText
    }

    function loadobjs(){
    if (!document.getElementById)
    return
    for (i=0; i<arguments.length; i++){
    var file=arguments[i]
    var fileref=""
    if (loadedobjects.indexOf(file)==-1){ //Check to see if this object has not already been added to page before proceeding
    if (file.indexOf(".js")!=-1){ //If object is a js file
    fileref=document.createElement('script')
    fileref.setAttribute("type","text/JavaScript");
    fileref.setAttribute("src", file);
    }
    else if (file.indexOf(".CSS")!=-1){ //If object is a CSS file
    fileref=document.createElement("link")
    fileref.setAttribute("rel", "stylesheet");
    fileref.setAttribute("type", "text/CSS");
    fileref.setAttribute("href", file);
    }
    }
    if (fileref!=""){
    document.getElementsByTagName("head").item(0).appe ndChild(fileref)
    loadedobjects+=file+" " //Remember this object as being already added to page
    }
    }
    }

  2. #2

    Re: Ajax turkçe karakter problemi

    Spoiler:
    http://www.nothingrows.net/?obj=Article&act=show&val=9 burada anlatmıştım. -makalenin altında-


    Verilerini göndermeden önce escape() fonksiyonu ile ISO Latin karakter setindeki türkçe karakterleri hexadecimal kodlama yapısına çevirmelisin.
    Mesaj nothingrows tarafından 23.07.2007 (18:29) yeniden düzenlendi. Açıklama: Bağlantı geçerli değil...

  3. #3

    Re: Ajax turkçe karakter problemi

    Ayrıca yukarıda verdiğin kodlar CSS ve js dosyalarını dökümana eklemek için kullanılabilir, bahsettiğin konuyla alakalı değiller.

  4. #4

    Re: Ajax turkçe karakter problemi

    Merhabalar,

    dediğiniz gibi bu kod CSS ve js dosyası yüklemek icin de kullanılıyor.

    Dediğiniz linke girmeye calistim. ancak sayfa yukleniyor mesajını gecemiyor. yandaki linklere bir sekilde tıkladım. uye de oldum. Ancak verdiginiz linke ulasamadim.

    Bu yazınız baska bir yerde var mı?

    Teşekkurler

  5. #5

    Re: Ajax turkçe karakter problemi

    Burayı tamamen unutmuşum Yoğun iş temposu nedeniyle bir hayli uzak kaldım forumdan. Yukarıda bahedilen makalenin bulunduğu sunucu teknik problemler nedeniyle devre dışı kaldı ve veritabanı vs. herşeyi kaybettik. Aklımda kaldığı kadarıyla tekrar anlatmaya çalışayım.

    ajax kullanırken yaşanan Türkçe karakter sıkıntısının birkaç yöntemi birarada kullanarak çözüyorum. Bunları adım adım anlatayım.

    1. Öncelikle ajax kullanarak sunucu taraflı çalışan bir uygulamaya veri gönderecekseniz, bu verdeki türkçe karakterleri hexadecimal kod yapısına çevirerek göndermeniz gerekiyor. Bunun için JavaScript'te halen hazır bir fonksiyon mevcut. Bu fonksiyonun adı ise escape'tir. Örnek olarak şöyle kullanırız.

    Kod:
     var some_value = document.getElementById('some_input').value;
     var request_url = 'do_some_response.PHP?val='+escape(some_value);
    
    Artık bundan sonra request_url'yi kendi XHR nesnenizi nasıl kullanıyorsanız o şekilde GET metodu ile gönderebilirsiniz. Ya da post edecekseniz kendi fonksiyonunuz içinde verileri escape() içine alarak gönderin.

    2. Gelelim bu işin sunucu tarafına. İçinde Türkçe karakterler olan bir veriyi escape ile gönderdiğimiz vakit karşı tarafta şöyle bir algılama meydana gelir.

    Kod:
    escape('şŞçÇğĞıİüÜ') = "%u015F%u015E%E7%C7%u011F%u011E%u0131%u0130%FC%DC"
    
    Yani Türkçe karakterler artık hexadecimal yapısındaki karşılıklarına eşitlenir. Sunucu taraflı dosyamız örneğin PHP dilinde şöyle bir fonksiyon işimizi görecektir.

    PHP Kodu:
    function un_escape $string )
    {
       
    $string preg_replace("/%u0130/""İ"$string);
       
    $string preg_replace("/%u0131/""ı"$string);
       
    $string preg_replace("/%u011F/""ğ"$string);
       
    $string preg_replace("/%u011E/""Ğ"$string);
       
    $string preg_replace("/%u015F/""ş"$string);
       
    $string preg_replace("/%u015E/""Ş"$string);

      return 
    $string;

    PHP dosyamızın içinde veriyi şu şekilde elde edersek;

    PHP Kodu:
    <?PHP
     $value 
    = empty($_GET['val']) ? '' un_escape(trim($_GET['val']));
    ?>
    artık Türkçe karakter sıkıntısı yaşamayız.

    3. Eğer PHP ve MySQL kullanıyorsak yaşayacağımız diğer bir problem ise veritabanı ve tablolarınızın Collation = Karşılaştırma değeridir. Hatırlayamadığım bir sürümünde icad edilen bu özellik nedeniyle insanımız hangi Karşılaştırma değerinin Türkçe için yapıldığı konusunda bir hayli tereddüte düşmüştür. Benim tavsiyem veritabanı ve ona bağlı otomatik olarak latin_5_turkish_ci olanı seçmenizdir. Buna artı olarak MySQL bağlantısını yarattığınız söz diziminden sonra şunları da kullanmalısınız;

    PHP Kodu:
      @mysql_query("SET NAMES 'latin5'");
      @
    mysql_query("SET CHARACTER SET 'latin5'");
      @
    mysql_query("SET COLLATION_CONNECTION = 'latin5_turkish_ci'"); 
    Nerden uydurduğumu ben de hatırlamıyorum ama hala kullanıyorum heryerde işte

    Bu konuda daha fazla sıkıntı yaşayan arkadaşlarım benimle her türlü irtibata geçmekten çekinmesinler lütfen.

  6. #6
    Seyhunx
    Guest

    Çözüm!

    <%
    Response.ContentType = "text/HTML"
    Response.Charset = "windows-1254"
    Session.LCID = 1055
    Session.CodePage = 1254
    %>

    Denedim ve çözdüğünü gördüm.İnşallah işinize yarar.

+ Yanıtla

Bu konu başlığı için etiketler

Mesaj Seçenekleri

  • Yeni başlık açamazsınız
  • Cevap yazabilirsiniz
  • Dosya ekleyemezsiniz
  • Mesajlarınızı değiştiremezsiniz