AJAX ile PHP, HTML Uygulamalarında Türkçe Karakter Sorunu ve Çözümleri

Merhaba arkadaşlar bu yazımızda en iyilerimizin bile en çok karşılaştığı AJAX uygulamalarında ki Türkçe karakterler yaşadığımız sorunlara çözümler aramaya çalışacağız.
Genelde iki kısımda sorunlar yaşanmaktadır. Bunlardan

1-Html ile AJAX kullanırken yaşanan sorunlar
2-PHP ile AJAX kullanırken yaşanan sorunlardır.


[ad#orta]

İlk olarak sorunumuz HTML ile nasıl çözeriz ona bakalım.
Ajax ile yapılan uygulamalarda çı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 veya UTF-8 seçildiğinde düzgün çalışmaktadır.

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:
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ış oluruz.

İkinci olarak sorunumuz PHP ile nasıl çözeriz ona bakalım.

Bizlerde sayfalarımızı ağırlıklı olarak PHP’de hazırladığımız için en çok sorunlar PHP ile yaşanmakta ve bende sorunu çözmek için bunun üzerinde daha çok duracağım.

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"); 
?>

kodlarını yazarak türçe karakter problemini ortadan kaldırmış oluruz.

Eğer bilgileri veritabanına kaydedecek isek 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.
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 olarak veritabanına ekleme için şöyle olabilir.
Denedim ve sonuç tam olarak gerçekleşiyor.

PHP Kodu:

<? 
$baglan=@mysql_connect("localhost", "root", "123") or die('Erişim hatası: ' . mysql_error()); 
$vt=mysql_select_db("denemevt") 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 "Kayıt edildi."; 
?>

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

Bunun tam terside mümkündür. Diyelim ki veritabanındaki bilgiler UTF-8 ama biz bunu
ISO-8859-9 çevirmek istiyoruz o zaman yine aynı fonksiyon kullanılabilir.

Sizlere Örnek olması açısından bir AJAX çalışması:

index.html Sayfamız

<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 Sayfamız

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

Evet arkadaşlar bu dersimizde de nasıl bir AJAX uygulamasında türkçe karakter sorunlarıyla başa çıkabileceğimizi öğrenmiş olduk.

Herkese başarılar…

“AJAX ile PHP, HTML Uygulamalarında Türkçe Karakter Sorunu ve Çözümleri” için 7 cevap

  1. mehaba benim bir sorunum var öncelikle bunu yazdığımda

    sayfa hata veriyor iyi düzenlenmemiş diyor

    ajaxla post ettiğim sayfadan geri gelen bilgi de sadece karakter sorunu var

    bunu nasıl düzeltebilirim. şimdiden teşekkür ederim.

  2. Sayfanın karekter setine ve gönderdiğini sayfanın karakter setinde ikisi arasında uyuşmazlık vardır büyük ihtimal. Ve makalede yazan _header kısımlarıda sayfanda olması lazım. Makalede yazılanları dikkatle yaparsan sorun kalmaz umarım…

  3. Ben biraz daha araştırdım. En güzel çözümü buldum bu kadar karışıklığa gerek yok. Yapmamız gereken

    bu kodu veritabanından veri çektiğimiz sayfaya bunu eklemek gerekiyor

  4. evet yukarıda bulunan iconv kodu kullandım veri veritabanına ajax ile kaydederken sorun yaşamadım. Teşekkürler

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

Bir Cevap Yazın

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