Tahribat'a niyeyse yazmamışım, bir çok konuda aradım bulamadım ve 4-5 konuya yazdım.Sürekli soruluyor bu yüzden çözümünü konuda vermek istiyorum.
!! Öncelikle bu php içindir.Asp için hatırladığım kadarıyla yazıcam.2 Dildeki website için yazdım.Başka dilde sorun olursa buraya yazın, çözümünü bilirlerse 2. mesajı editleyip oraya ekleyeceğim.
----
Bu sorun maalesef bir çok kişinin saçını başını yolduruyor.Fakat sakin olun.Çok basit çözümleri var.Genelde Türkçe için iso-8859-9 yani latin (Türkçe) karakter desteği yada windows-1254 yapmanızı söylerler.Böyle Türkçe karakterler görünüyormuş.Diğer türlü olmuyormuş...
Çözümü basit : utf-8.Her projemdeki dil budur ve şimdiye kadar hiç sıkıntı yaşamadım.Bir sürü karakterin desteğini verir.
Kısacası şunları yapmalısınız ;
1- Veritabanınızda (phpmyadmin vs.) utf8_general_ci kullanın .
2- Kodladığınız editörün (eğer linuxta kwrite gibi birşeyde aç-kaydet kısmında) utf-8 olduğundan emin olun.Yani dosya kodlaması utf 8 olsun(bom'suz).Windowstada bazı editörlerde bunu kontrol edin.Utf8 ile kodladığınızdan emin olun.
3- Phpde bütün sayfaların başında şu ifadenin olduğundan emin olun ;
<?php header('Content-Type: text/html; charset=utf-8'); ?>
ajax ile çekiyorsanız hepsinde olmasına gerek yok.Görünen sayfalarda en az 1 tane oılmalı.
4- Arama motorları, hmtl için meta set'lerini kullanmamız gerekir.
<meta http-equiv="Content-Language" content="tr">
html5'de daha basittir ;
<meta charset="utf-8">
5- Kodlarken kullandığımız yapu utf8, görüntülerken yine utf8 i kullandık.Fakat bir problem daha olabilir.Buda veritabanından veri çekerken utf8 olarak çekmek.Bunun için şöyle yapın;
$dbbaglan = mysql_connect ("localhost","kullanıcıadı","şifre") or die('mysql bağlantısında sorun var');
mysql_select_db ("veritabanı",$dbbaglan) or die('veritabanı seçerken problem oldu');
//buraya kadar veritabanına bağlandık ve seçtik.Burdan sonra ;
mysql_query("SET NAMES 'utf8'") or die('utf-8 de problem');
Gördüğünüz gibi mysql_query("SET NAMES 'utf8'") yaptığımız zaman kodlama yapımız, kodlamamız, mysql stilimiz, mysqldan veri çekmemiz ve gösterimimizin hepsi utf8 olacaktır.
Dikkat !!
Bi projede bütün gün boyunca çözmeye çalışmıştım.Dediklerimi yaptım ama hala problem vardı.Sonradan çözdüm.
Phpde veritabanı vs xss için html ile ilgili fonksiyonlar kullanıyoruz ( html_entites_encode vs.) . Bunlardan birini kullanıp daha sonra büyültmeye çalışmıştım.Ekrana html haliyle bastırdığı için büyümemiş.Tekrardan çevirip, büyütüp, yeniden htmlentites() kullanıp ekrana bastırmak zorunda kaldım.
Bunun gibi problemler çıkabilir.Fakat yukardaki 5 adımı yaptığınızda bir problem çıkmaması gerek.
utf8 hakkında daha detaylı bilgi için: Wiki-Utf8