Forumlarda, bloglarda, web sitelerinde AJAX 'ta Türkçe Karakter Problemi ile ilgili onlarca makale, başlık ve soru yazıldı. Çözümler türlü yollarla gösterildi. Bu yanıtlardan PHP ile ilgili olanlarında genellikle düzenli ifadeler ve htmlspecialchars kullanılıyordu. Javascript kullanılan çözümler de vardı.
Ancak ben PHP 4.0.5 ile gelen ve PHP 5 'in de vazgeçilmez fonksiyon gruplarından olan " iconv " serisini kullanana rastlamadım.
iconv fonksiyonu, yazıyı istenilen karakter setine çevirmenizi sağlar.Burada ihtiyacınız olan; ' Dönüşecek yazınız ' , ' dosyanızın karakter seti ' ve ' yazınızı çevirmek istediğiniz karakter seti ' dir.
<?php
echo iconv("ISO-8859-9", "UTF-8", "Üzümü ye bağını da sor !");
?>
Mesela yukarıdaki örnekte iso-8859-9 standart Türkçe karakter setiyle kaydedilmiş bir dosyamız var. Biz bunun içerisinden bir parça seçiyoruz ve bunu UTF-8 karakter setine çevirmek istiyoruz. Bu fonksiyon işimizi görecektir.
İşte bu örnekten yola çıkarak, AJAX 'ta Türkçe Karakter Problemi 'nin nasıl çözülebileceğini siz de gözünüzde canlandırmışsınızdır:
Diyelimki iso-8859-9 (genel Türkçe kodlama standartı) karakter seti ile kodlanmış bir programınız var. Bununla ajax 'ı işleme sokacak dosyanıza veri gönderdiniz. Javascript dosyanızın geri döndüreceği sonuç UTF-8 karakter setinde olacaktır. Sizin web siteniz, kodlarınız iso-8859-9 karakterinde olduğundan gelen veriler bozuk olacaktır. Bunları bir şekilde AJAX kullanırken düzenlemeniz gerekecek. İşte bu noktada devreye iconv girecek.
$favori_meyvesi = iconv("UTF-8", "ISO-8859-9", $_POST['fav_meyve']);
Şeklinde Javascript dosyanızın etkileştiği PHP dosyasında karakter setini düzenliyorsunuz. Burada örneğin " Favori Meyve " olarak <input> alanına Vişne yazılmış olsun. Kullandığınız AJAX 'ın görevide bunu seçeneklerize kayıt etmek veya güncellemek. Gönder tuşuna bastınız, " Vişne " Javascript ile ilgili PHP dosyasıyla iletişim kurdu, cevap olarak şu döndü:
- Vişne meyvesi favori meyvelerinize eklendi...
Eğer iconv kullanmasaydık ve dosyamızın, sitemizin karakter setide UTF-8 'den farklı olsaydı, "ş" karakteri bozuk gözükecekti.
Not: Yazılarımdan, makalelerimden alıntı yapan Forum, Blog ve Web Sitelerinden mutlaka konuya link vermelerini ve isim ile dip not düşmelerini rica ediyorum. |