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.

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.

PHP Kodu:
$post = iconv("UTF-8", "ISO-8859-9", $_POST['adsoyad']);

ö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());

$post = iconv("UTF-8", "ISO-8859-9", $_POST['adsoyad']);

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

 

Örnek bir AJAX çalışması:

index.html

<script type="text/javascript" language="javascript">
var http_request = false;

function update(formid,divid){
document.getElementById(divid).innerHTML="işleminiz yapılıyor,Lütfen bekleyin.."
var form    = document.getElementById(formid);
var http_request = false;

      http_request = false;
      if (window.XMLHttpRequest) {
         http_request = new XMLHttpRequest();
         if (http_request.overrideMimeType) {
            http_request.overrideMimeType(‘text/xml; charset=iso-8859-9′);
         }
      } else if (window.ActiveXObject) {
         try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (!http_request) {
         alert(‘Cannot create XMLHTTP instance’);
         return false;
      }
      http_request.onreadystatechange = alertContents;
      http_request.open(‘POST’, "islem.php", true);
      http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      http_request.setRequestHeader("Connection", "close");
      http_request.send(createQuery(form));
  

   function alertContents() {
      if (http_request.readyState == 4) {
      if (http_request.status == 200) {
       document.getElementById(divid).innerHTML=http_request.responseText;
        
           }else { alert(‘Hata Oluştu, Tekrar Deneyin…’);}
        
        }
      }

}

function createQuery(form)
{
    var elements = form.elements;
    var pairs = new Array();

    for (var i = 0; i < elements.length; i++) {

        if ((name = elements[i].name) && (value = elements[i].value))
            pairs.push(name + "=" + encodeURIComponent(value));
    }
    //pairs.push("param1=1");
    return pairs.join("&");
}
</script>

<form name="form1" id="form1" method="post" action="">
     <input name="param1" type="text" value="ĞÜŞÖÇğüöşçı"><br>
     <input type="button" value="Türkçe" onClick="javascript:update(‘form1‘,’ajaxTest1‘);"><br>
     <div id="ajaxTest1">Burası ilk yazı…</div><br><br>
</form>

 

 

islem.php

<?
header("Content-Type: text/xml; charset=utf-8");
print_r($_POST);
?>

 

 

Arama Terimleri:

ajax türkçe karakter sorunu, ajax türkçe karakter, ajax türkçe karakter problemi, iconv türkçe karakter sorunu, iconv() php ceviz, mb_convert_encoding($name iso-8859-1 utf-8, mysql türkçe karakter ceviz net, nihatonyıl, php de ajax responsetext ne işe yarar, php post edilen sayfada türkçe karakter sorunu

Benzer Konular:

  • Türkçe Linux Ansiklopedisi Geçtiğimiz günlerde http://wiki.linux-sevenler.org ”Türkçe Linux Özgür Linux Ansiklopedisi (wiki)” açıldı. Henüz içerik olarak fazla zengin olmasa da kısa zamanda kapsamlı bir ansiklopediye...
  • Gmail’e Türkçe dil desteği geldi ! Google’ın sunduğu gmail e-posta servisi nihayetinde Türkçe desteğini getirdi. Arabirimi Türkçe kullanmak için yapmanız gerekenler şunlar:…Google’ın sunduğu gmail e-posta servisi...
Yazar - 15 Şubat 2006. Kategori PROGRAMLAMA. Bu yazıya yazılan yazıları RSS üzerinden takip edebilirsiniz RSS 2.0. Yorum yazabilir veya geri izlemede bulunabilirsiniz.

"Ajax uygulamalarında Türkçe karakter sorunu" için yapılan toplam yorum - 42

  1. Teşekkürler perlci , oldukça sık karşılaşılan bir sorun.Ele alman güzel olmuş.

  2. cem, çözüm şöyle eğer yukarıdaki örnekte http_request.responseText nesnesini unescape(http_request.responseText) ve tabi yine aynı örnekte encodeURIComponent(value));
    satırını encodeURIComponent(escape(value))); olarak değiştirirsen çözüm olur. Bu durumda PHP nin header bilgisi için ek bir işlem yapmazsınız. Yani Türkçe karakter sorunu olmaz,Fakat bu durumda bilgiler unicode olarak kodlanacaktır. Yani %u00DE gibi.Eğer bilgileri veritabanına yada şifre sorgulaması için kullandığınızda bunu dönüştürmeniz gerekecektir.

  3. Üstad makale güzel, görüdüğüm kadarıylada tr karakter sorununu çözmüşsün ama bunu header kullanmadan xmlHttpRequest nesnesiyle yapmanın bir yolu yok mu? Çünki header için ob_start() fonksiyonu nu kullanmak zorunda kalıyorum.

  4. text/html dediğiniz takdir de de oluyor. şimdi bu ne demek bu tepesine text/xml diyemeyeceğiniz dökümanlarda yırttınız demek :D

  5. < % Response.Charset = "windows-1254" %>

    asp de sayfanın başına bunu ekleyin.

  6. Kardeşler, benim php 4.4.2 bu iconv() fonkisyonu bende çalışmıyor. Başka yolu var mıdır?

  7. islem.php sayfasını ASP dilinden anlatacak birileri var mı acaba? dizi değişken yazdırılmış fakat hangi değer çekilmiş burada çıkaramadım

  8. < ?php
    header("Content-Type: text/xml; charset=utf-8");
    ?>

    bu kodu kullandım fakat sitemde hala türkçe karakterler gözükmüyor ???????

  9. < ?php
    header("Content-Type: text/xml; charset=ISO-8859-9");
    ?>

  10. Erkan BALABAN

    eğer

    header(“Content-Type: text/xml; charset=ISO-8859-9″);

    kullanıyorsanız sayfanın karakter kodlaması da ISO-8859-9 olmalıdır.

    eğer

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

    kullanıyorsanız da sayfanın karakter kodlaması UTF-8 olmalıdır.

  11. saol kardeşimm tşk ederim

  12. ahmet alp balkan arkadaşımızın yazdığı kodun ASP versiyonu.Arkadaşım a lazım oldu Phpden ASPye çevirdi. Paylaşayım demiş :)

    < %
    function karakterTR(metin) {
    metin = replace(metin, "ç", "ç")
    metin = replace(metin, "Ç", "Ç")
    metin = replace(metin, "ÄŸ", "ğ")
    metin = replace(metin, "Ä", "ğ")
    metin = replace(metin, "ı", "ı")
    metin = replace(metin, "İ", "ı")
    metin = replace(metin, "ö", "ö")
    metin = replace(metin, "Ö", "Ö")
    metin = replace(metin, "ÅŸ", "ş")
    metin = replace(metin, "Å", "ş")
    metin = replace(metin, "ü", "ü")
    metin = replace(metin, "Ü", "Ü")
    karakterTR = metin
    end function
    %>

  13. ahmet alp balkan

    evet uğur ve erkan doğru yazmışlar. ben de o tip kullanıyordum. fakat bu tip şeyler responsetext kısmında işe yarar. ajax’da post ederken yine sorunlar yaşanabilir. onun için de ufak fonksiyonlar var:

    < ?php

    // ahmet alp balkan 2006.
    function ajaxturkishreplace($newphrase) {
    $newphrase = str_replace("Ü","Ü",$newphrase);
    $newphrase = str_replace("Å","ş",$newphrase);
    $newphrase = str_replace("Ä","ğ",$newphrase);
    $newphrase = str_replace("Ç","Ç",$newphrase);
    $newphrase = str_replace("İ","ı",$newphrase);
    $newphrase = str_replace("Ö","Ö",$newphrase);
    $newphrase = str_replace("ü","ü",$newphrase);
    $newphrase = str_replace("ÅŸ","ş",$newphrase);
    $newphrase = str_replace("ç","ç",$newphrase);
    $newphrase = str_replace("ı","ı",$newphrase);
    $newphrase = str_replace("ö","ö",$newphrase);
    $newphrase = str_replace("ÄŸ","ğ",$newphrase);

    return $newphrase;
    }
    ?>

    zaten forumda da bulabilirsiniz.

  14. islem.php ie’de türkçe karakterleri sorunsuz gösteriyor..
    Ancak aynı kod firefox’ta türkçe karakterleri göstermiyor…
    Yardım lütfen…

  15. Ben vbulletin 3.5.0 Kullanıyorum site içerisinde hızlı mesaj ve shoutbox chat bölümü var her ikisindede donma problemi yaşıyorum ş,ğ,ı,ı,ğ Harflerini kullandığım zaman mesaj yollamıyor donup kalıyor bu sorun herhangi birşey yüklediğimde olmadı ben biraz serverden kaynaklanıyor diye düşünüyorum ama yaklaşık 2 aydır bu durumda bu konu hakkında yardımcı olursanız çok sevinirim şimdiden teşekkürler yazmamı istediğiniz başka bir bilgi varsa verebilirim

  16. Yaşadığım sorun Türkçe Karekter yollayıp, karşılığında türkçe karekter alma ile ilgili değil. Benim Sorunum, şu…

    Ajax ile bir Text Input ‘tan Bir yazının islem.php aracılığı ile include edilerek sayfada görüntülenmesini istiyorum… Görüntülüyor da… Fakat include edilen html dosyasında türkçe karekterler var.

    islem.php içeriği şu;

    < ?
    include("../monograflar/" . $_GET[get] . ".htm");
    ?>

    responseText ‘ten gelen bilgileri document.write() ile yazdırdığımda sorun çıkmıyor. Fakat document.write tüm sayfayı silip yeniden yazıyor.

    responseText ‘i innerHTML ile form elementine aktardığımda UTF-8 Kodlaması ile karşı karşıya kalıyorum… Content-type kodları da işe yaramıyor :S yardım ederseniz sevinirim

  17. HEAD kalıbınının içerisine:

    Sayfamızda bir yerde ASP ile:
    < % Response.Charset = "windows-1254" %>

    yaparak türkçe karakterler düzeliyor.

  18. http_request.overrideMimeType(‘text/xml; charset=iso-8859-9′);
    Tam olarak istediğim şey buydu.
    Teşekkürler dostum.

  19. Bahadir Kocaoglu

    Ben bu ajax ornegini kendi sitemde kullaniyorum, fakat formumda
    var 6-7 tane. HTML kodlari icerisinde radio da en sonraki radio degeri ne ise onu gonderiyor post.php dosyama. Bunu nasil giderebilirim?



  20. bunu nasıl duzenleyebılırız birturlu olmadı sitede tr karakter hatası verıyor

  21. ajaxla çağırdığınız php sayfasının üstünde

    header(“Content-Type: text/xml; charset=ISO-8859-9″);

    komutu yerine
    header(“Content-Type: text/html; charset=ISO-8859-9″);

    komutunu yazarsanız sanırım çözülür

    bende çözüldü en azından…

  22. Arkadaşlar bende şöyle bir problem var. Serverde “mod_security” kurulu olduğu için hızlı mesajda Türkçe karakterler yazdığımızda yollamıyorbende bu fonksiyonu kapadım. Ne önerirsiniz? şimdiden teşekkürler

  23. SAnırım yukarda bi yanlışlık olmuş biraz daha geliştirilmiş ve düzeltilmiş hali:
    function karakterTR(metin)
    metin = replace(metin, chr(195)&chr(167), “ç”)
    metin = replace(metin, chr(195)&chr(135), “Ç”)
    metin = replace(metin, chr(196)&chr(159), “ğ”)
    metin = replace(metin, chr(196)&chr(158), “ğ”)
    metin = replace(metin, chr(196)&chr(177), “ı”)
    metin = replace(metin, chr(196)&chr(176), “ı”)
    metin = replace(metin, chr(195)&chr(182), “ö”)
    metin = replace(metin, chr(195)&chr(150), “Ö”)
    metin = replace(metin, chr(197)&chr(159), “ş”)
    metin = replace(metin, chr(197)&chr(158), “ş”)
    metin = replace(metin, chr(195)&chr(188), “ü”)
    metin = replace(metin, chr(195)&chr(156), “Ü”)
    karakterTR = metin
    end function

  24. Başta Perlci olmak üzere siteye bilgi giren herkese çok teşekkürler.

  25. header(“Content-Type: text/xml; charset=windows-1254″);
    ob_start() ;
    bu kodlarla türkce karekter sorununu internet explorer de cözdüm ama fire foks da hala sorun var bunu nasıl cözebilirim
    yardım edin lütttfennnnn:)

  26. işte arkadaşlar sorunun çözümü bu satırda yatıyor.
    http_request.overrideMimeType(‘text/xml; charset=iso-8859-9′);
    Bunu aynı şekilde http_request.open(‘POST’, “islem.php”, true);
    satırının hemen altında kullanırsanız sorun kalmıyor.

  27. asp – php sayfalarınızı notpad ile açın. farklı kaydet komutu verin kaydetme sihir bazının altındaki seçeneklerde KODLAMA kısmından UTF i seçip kaydedin hiç bir problem kalmaz…

  28. < ?php

    $sendTo = "okancanist@hotmail.com";
    $subject = "Siparis";
    $headers = "From: " . $_POST["firstName"] ." ". $_POST["lastname"] . "<" . $_POST["email"] .">\r\n”;
    $headers .= “Reply-To: ” . $_POST["email"] . “\r\n”;
    $headers .= “Return-path: ” . $_POST["email"];
    $message = $_POST["message"];
    $email = $_POST["email"];
    $message = mb_convert_encoding($message ,”iso-8859-9″,”utf-8″);
    $name = $_POST["name"];
    $name = mb_convert_encoding($name ,”iso-8859-9″,”utf-8″);
    $kod = $_POST["kod"];
    $kod = mb_convert_encoding($kod ,”iso-8859-9″,”utf-8″);
    $adet = $_POST["adet"];
    $adet = mb_convert_encoding($adet ,”iso-8859-9″,”utf-8″);
    $renk = $_POST["renk"];
    $renk = mb_convert_encoding($renk ,”iso-8859-9″,”utf-8″);
    $body = ” Isim: $name\n Email: $email\n Ürünkodu: $kod\n Ürün Adedi: $adet\n Ürün Rengi: $renk\n Mesaj:\n $message”;
    mail($sendTo, $subject, $body, $headers);

    ?>

  29. Replace yapmak için karakter gelmiyor. Türkkçe karakterlerin hepsinde ? (soru işareti) çıkıyor

  30. Perlci tebrikler…
    Güzel bir yaklaşım. Güzel bir anlatım.
    Başarılar

  31. arkadaşlar bu yazıyı ve yorumları belki 10 defa okudum ve denemeler yaptım ama beceremedim.

    şimdi sitemde ajax ile çalışan yorum kutusu var.

    ve şoyle bir kd buldum

    $comments_value=htmlentities(strip_tags(addslashes ($comments_value)),ENT_QUOTES,’ISO-8859-9′);

    $sql=”insert into comments set VID=$vid, UID=$uid, commen=’$comments_value’, addtime=’”.time().”‘”;

    sitenin charseti iso-8859-9 ve sitede yorumlardan başka hiç bir yerde türkçe karakter sorunu yok. Ve sadece ş ğ ı harflerini bozuyor. Harfleri sırasıyla şöyle yazdırıyor ÅŸ – ÄŸ – ı ki aynı zamanda sql tablosuna da bu şekilde kaydediyor.

    bunu nasıl çözebilirim lütfen yardım edin.

  32. Münip Öniz

    AJAX sorgularına yanıtlar http sunucu tarafından ve sunucunun karakter seti ile oluşturulduğundan, Türkçe karakter sorunu da orada çözülmelidir.
    Apache kullanıyorsanız ve sunucunun tüm kontrolu sizde ise, apache yapılandırma dosyalarında “AllowOverride” direktifi “all” olacak ve sitenizin kök dizinindeki “.htaccess” dosyasına “AddDefaultCharset iso-8859-9″ veya “AddDefaultCharset utf-8″ ekleyeceksiniz (hangisini kullanıyorsanız).
    Sunucu sizin değilse veya paylaşımlı bir sunucu kullanıyorsanız, sunucu yöneticisi ile “AllowOverride” durumu hakkında konuşmanız gerekir.

  33. Sevda Ersezer

    web.config dosyasına

    kodunu eklerseniz türkçe karakter sorununuz kalmayacaktır.

  34. Hüseyin Kardeş Çok saol. ASP ile ilgili verdiğin kod tam da aradığım şeydi. Tekrar teşekkürler.

  35. tek şey ajaxda get ettiğiniz dosyanın en başına koymakmış

  36. bu ipucunu paylaştığınız için teşekkürler

  37. Merhabalar;

    Karakter sorunu yaşamak istemiyorsak UTF-8 kullanmalıyız arkadaşlar bakın universal projelere hep UTF-8 ile kodlanmıştır.
    UTF-8 de de tabiki sorun yaşanır ama asgaridir bu sorun. ISO Latin5 en çok sorun yaşadığım kodlamalardı. UTF-8 e geçtim hiç sıkıntı yaşamıyorum :)

  38. Süleyman Demirkeser

    windowsla gelen hangi programda “Örneğin windows bilgisayarlarda farklı kaydet penceresinde iken kodlama türünü utf-8 seçtikten sonra” diyip utf8 seçebiliyoruz merak ettim

  39. arkadaslar, ustalar ellerınıze saglık hersey ıyı guzel hosta , ben veya benım gıbı programlama dılını bılmeyen php den anlamayan turden ınsanlar ıcın ‘surdan sunu yap burdan bunu yap ‘ tarzında bir önerınız yok mu acaba ? :)

  40. Çözüm için teşekkür ederim.

    Ben aynı kodu daha aşağılara eklediğim için hata almaktaydım, dediğiniz gibi en başa koydum sorun çözüldü tekrar teşekkürler…

    Ceviz farkı buna derim ben…

    Hörmetler…

  41. Uzun zamandır yaşadığım problemi çözmeme yardımcı olacak süper bir yazı.
    Teşekkürler perlci. iconv hayatımı kurtardı :)

  42. iconv işimi gordu iso -1 kullanıyordum, 9 kullanmam gerekiyomus :)

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>