Spoiler:
Verilerini göndermeden önce escape() fonksiyonu ile ISO Latin karakter setindeki türkçe karakterleri hexadecimal kodlama yapısına çevirmelisin.
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
}
}
}
Spoiler:
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...
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.
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
Burayı tamamen unutmuşumYoğ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.
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.Kod:var some_value = document.getElementById('some_input').value; var request_url = 'do_some_response.PHP?val='+escape(some_value);
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.
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.Kod:escape('şŞçÇğĞıİüÜ') = "%u015F%u015E%E7%C7%u011F%u011E%u0131%u0130%FC%DC"
PHP dosyamızın içinde veriyi şu şekilde elde edersek;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;
}
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;
Nerden uydurduğumu ben de hatırlamıyorum ama hala kullanıyorum heryerde iştePHP Kodu:@mysql_query("SET NAMES 'latin5'");
@mysql_query("SET CHARACTER SET 'latin5'");
@mysql_query("SET COLLATION_CONNECTION = 'latin5_turkish_ci'");
![]()
Bu konuda daha fazla sıkıntı yaşayan arkadaşlarım benimle her türlü irtibata geçmekten çekinmesinler lütfen.
<%
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.