Yazar GİRİŞİ

Son eklenen makale ve haberler

  Programlama » PHP

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.


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

 

 


perlci 14.02.2006

co.mments  del.icio.us  digg  Furl  NewsVine  Reddit  Spurl  TailRank  Wists   



Rating : 10 üzerinden 8.55
 



Tümünü Göster / Sadece Başlıklar Yorumlar

Yns Teşekkürler
Teşekkürler perlci , oldukça sık karşılaşılan bir sorun.Ele alman güzel olmuş.
 
cem Ajax Header İlişkisi
Ü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.
 
perlci Çözüm var
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.

 
selman buda oluyor.
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
 
Hüseyin Türkçe Çözüm
<% Response.Charset = "windows-1254" %>

asp de sayfanın başına bunu ekleyin.
 
Önder Versiyonda sorun
Kardeşler, benim php 4.4.2 bu iconv() fonkisyonu bende çalışmıyor. Başka yolu var mıdır?
 
melodrama ille de ASP, ille de ASP laylaylom..
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
 
Emre türkçe karakterler hala gözükmüyor
<?php
header("Content-Type: text/xml; charset=utf-8");
?>

bu kodu kullandım fakat sitemde hala türkçe karakterler gözükmüyor ???????
 
ugur sorunlara çözüm
<?php
header("Content-Type: text/xml; charset=ISO-8859-9");
?>
 
Erkan BALABAN header ve karakter kodlaması aynı olmalı
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.

 
ahmet alp balkan katılıyorum
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("Å&#158;","Ş",$newphrase);
$newphrase = str_replace("Ä&#158;","Ğ",$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.
 
emrahar Firefox\\\'ta türkçe karakter problemini nasıl çözeceğim?
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...
 
tuna Vbulletinde ajax türkçe karakter sorunu
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
 
goXXip Türkçe Karekter Sorunu
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
 
inan Harika
http_request.overrideMimeType('text/xml; charset=iso-8859-9');
Tam olarak istediğim şey buydu.
Teşekkürler dostum.
 
Bahadir Kocaoglu Script radio 'da calismiyor
Ben bu ajax ornegini kendi sitemde kullaniyorum, fakat formumda <input type="radio"> var 6-7 tane. HTML kodlari icerisinde radio da en sonraki radio degeri ne ise onu gonderiyor post.php dosyama. Bunu nasil giderebilirim?
 
hanoguz saol
saol kardeşimm tşk ederim
 
pinachi ASP ve AJAX Türkçe Karakter Sorununun Çözümü
HEAD kalıbınının içerisine:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1254">

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

yaparak türkçe karakterler düzeliyor.
 
neshat ben yapamadım
<title>Plugin :: <?php echo $_CONF['name']; ?> v.<?php echo $_CONF['version']; ?> &#187;</title>
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta name="author" content="<?php echo $_CONF['developer']; ?>" />
<meta name="robots" content="index,follow" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="phpfox/style.css" type="text/css" rel="stylesheet" />
</head>


bunu nasıl duzenleyebılırız birturlu olmadı sitede tr karakter hatası verıyor
 
murat emeği geçen herkese teşekkürler
Başta Perlci olmak üzere siteye bilgi giren herkese çok teşekkürler.
 
bilal ajax türkçe karekter sorunu
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:)
 
ladrans karakter çözüm
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...
 
arena Ajax problemi vbulletin 3.6
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
 
sinanonur ASP Kodu
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, "Ä&#158;", "Ğ")
metin = replace(metin, "ı", "ı")
metin = replace(metin, "İ", "İ")
metin = replace(metin, "ö", "ö")
metin = replace(metin, "Ö", "Ö")
metin = replace(metin, "ÅŸ", "ş")
metin = replace(metin, "Å&#158;", "Ş")
metin = replace(metin, "ü", "ü")
metin = replace(metin, "Ü", "Ü")
karakterTR = metin
end function
%>
 
sinanonur Asp Kodu
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
 
mehmeterd En Sonunda Buldum...
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.
 
Merakli TR Sorunu
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...
 
okan turkce karakter sorununu nasıl asabılırım
<?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);

?>
 
hakan bende replace yapabileceğim bir karakter gelmiyor.
Replace yapmak için karakter gelmiyor. Türkkçe karakterlerin hepsinde ? (soru işareti) çıkıyor
 
Aziz Güzel Yaklaşım
Perlci tebrikler...
Güzel bir yaklaşım. Güzel bir anlatım.
Başarılar
 
halil beceremedim
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.
 
Münip Öniz AJAX Türkçe karakter
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.
 
orhan :(
http://www.linuxuser.at/index.php?title=Most_Simple_Ajax_Chat_Room

ne yaptımsa olmadı bu uygulamada türkçe karakter sorunu var ve düzelmiyor :( Yardımcı olabilir misiniz??
 
Sevda Ersezer Türkçe karakter sorunu
web.config dosyasına
<globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="iso-8859-9" uiCulture="tr-TR" culture="tr-TR"/>
kodunu eklerseniz türkçe karakter sorununuz kalmayacaktır.
 
Süleyman Hüseyin Kardeş Çok saol
Hüseyin Kardeş Çok saol. ASP ile ilgili verdiğin kod tam da aradığım şeydi. Tekrar teşekkürler.
 
NihatOnyıl Teşekürler tek şey ajax
tek şey ajaxda get ettiğiniz dosyanın en başına koymakmış
 




yorum Yorum ekle
İsminiz:
Mailiniz:
Yorum Konu:
Soru: Dünyanın uydusu?
Cevap :
Bütün alanları doldurmanız gerekmektedir.

 
XHTML 1.0 CSS 2.1
Ceviz Reklam