PHP veritabanı türkçe karakter sorunu

Mustafa Eroğlu

Öğrenci
Katılım
28 Şubat 2016
Mesajlar
1
Reaksiyon puanı
0
Puanları
1
Yaş
31
Merhabalar panelden doldurduğum form veri tabanına Türkçe karakterleri tuhaf harfler ile kaydediyor. mysql_query("SET NAMES UTF-8"); ile düzelmiyor benim mysql bağlantım biraz karışık olduğu için nasıl yapacağımı bilemedim.

config.php
PHP:
$cfg['sqlHost'] = "";
//Authorization
$cfg['sqlUser'] = "";
$cfg['sqlPass'] = "";

//Databases
$cfg['aDatabases'] = array ();
$cfg['aDatabases'][0] = "db1";
$cfg['aDatabases'][1] = "db2";
$cfg['aDatabases'][2] = "db3";
// mysql_query
$cfg['qNames'] = mysql_query("SET NAMES UTF-8");
$cfg['qChar'] = mysql_query("SET CHARACTER SET UTF-8");


şeklinde değişkenlere eşitlendi. Paneli türkçe karakterler ile kullanamadım bir türlü. Veritabanı UTF-8 turkish-ci ayarladım.

PHP:
<?php
class mysql
{
    private $aDatabases = array();
    private $sqlHandle;
   
    function __construct($szHostname, $szUsername, $szPassword,$aDatabases)
    {
            $this -> aDatabases = $aDatabases;
            $this -> connect($szHostname, $szUsername, $szPassword);
    }
   
    private function connect($szHostname, $szUsername, $szPassword)
    {
        $this -> sqlHandle = mysql_pconnect($szHostname, $szUsername, $szPassword);
        if($this -> sqlHandle)
        {
            $this -> changeDB('acc'); //default db
        }
        else     die("Could not open database connection");
    }
   
    public function changeDB($szDB)
    {
        switch($szDB)
        {
            case('acc'):
            mysql_select_db($this -> aDatabases[0], $this -> sqlHandle);
            break;
           
            case('shard'):
            mysql_select_db($this -> aDatabases[1], $this -> sqlHandle);
            break;
           
            case('log'):
            mysql_select_db($this -> aDatabases[2], $this -> sqlHandle);
            break;
           
            default:
                die("Invalid value for mysql -> changeDB [$szDB]");
            break;
        }
    }
   
    public function exec($szQuery)
    {
        return mysql_query($szQuery);
    }
   
    public function getRow($szQuery)
    {
        $hQuery = $this -> exec($szQuery);
        $result = mysql_fetch_row($hQuery);
        return $result[0];
    }
   
    public function fetchRow($szQuery)
    {
        $hQuery = $this -> exec($szQuery);
        $result = mysql_fetch_row($hQuery);
        return $result;
    }
   
    public function fetchArray($szQuery)
    {
        $hQuery = $this -> exec($szQuery);
        $result = mysql_fetch_array($hQuery);
        return $result;
    }
   
    public function numRows($szQuery)
    {
        $hQuery = $this -> exec($szQuery);
        $result = mysql_num_rows($hQuery);
        return $result;
    }
}
?>
 

BilimHezarfen

Asistan
Katılım
17 Mart 2016
Mesajlar
122
Reaksiyon puanı
20
Puanları
18
Yaş
28
Web sayfamızı oluşturmadan önce hangi karakter setini kullanacağımıza karar vermek gerekir. Character Sets adresinden de görebileceğiniz üzere standartlaşan onlarca karakter kodlaması vardır. Karakter kodlaması, karakter setlerinden oluşur. ISO-8859, MS-Windows ve Unicode en çok kullanılan karakter kodlamalarındandır. ISO-8859-9′da bir ISO-8859′un bir karakter setidir.

ISO-8859 karakter seti dillere desteğini bölümler halinde vermiştir. İlk bölümde -bu bölüm ISO-8859-1 (Latin1) olarak bilinir- İngilizce, Franszıca, İspanyolca, Portekizce gibi dillere destek vermiştir. Türkçe desteği ancak 9. bölümde ISO-8859-9 (Latin5) karakter setiyle gelmiştir. MySQL’de bulunan latin5 ile ISO-8859-9 aslında aynı şeylerdir.

Türkçe diline destek veren karakter setlerinden en çok kullanılanları; ISO-8859-9 (latin5) Windows-1254 ve UTF-8’dir. UTF-8 çoklu dil desteği olan bir karakter setidir. Yani Türkçe’nin yanında örneğin Rusça’ya da destek vermektedir. Diğerlerinden farkı daha çok dile destek verdiğinden dosya büyüklükleri biraz daha fazla olabilmektedir.

Şimdi bir siteye başlamadan önce Türkçe karakter problemi ile karşılaşmamak için yapmanız gerekenlere sırayla bakalım.

Sitemizi oluşturmaya başlamadan önce açık kaynak kodlu bir yazılım olan Notepad++ (http://notepad-plus-plus.org/) programını kurmanızı öneririm. Bu programı kullanarak sitemizin tüm karakterlerinizin bozulmasına neden olabilen UTF-8 BOM (Byte Order Mark) sorununu ortadan kaldıracağız.

Html ve php dosyalarımızı yazarken karakter setini UTF-8 kullanmak; her ülkeden ve dilden kullacılarının sitemizi ziyaret ederken karakter sorunları ile karşılaşmamasını sağlar.
Sitenizi oluşturmaya, html ve php kodlarınızı yazmaya başlamadan önce Notepad++’ı açıp Format menüsünden UTF-8 without BOM‘u seçin ve dosyalarınızı utf8 formatını kullanarak yazın. Notepad++’ın Settings>Preferences>New Document bölümünden de her yeni dosya oluştururken dosya formatının otomatik olarak utf-8 without bom olmasını sağlayabiliriz.

Daha sonra html kodlarınızı yazmaya başlayabilirsiniz. HTML ile de sayfanızın karakter setini UTF-8 olarak ayarlamanız gerekiyor. Etiketlerinin arasına yerleştireceğiniz aşağıdaki kod ile bu işi yapacağız.


<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Şimdi MySQL veritabanımızı oluşturalım.. Veritabanımızı oluştururken Karşılaştırma bölümünden utf8_turkish_ci yi seçmenizi öneriyorum. Böylelikle MySQL’de oluşturacağınız tüm tablo ve alanlar utf8 kodlamasına göre oluşturulaca

k. Artık MySQL’den veri girişi yaptığınızda Türkçe karakter problemi olmadan verilerinizi görebiliyor olmalısınız.


PHP kodlarıyla MySQL’e bağlanırken yapmamız gereken bir şey daha var. SET NAMES utf8 kodunu çalıştırmak.. Bunu da şu şekilde yapıyoruz;

<?
php mysql_connect("localhost","root","1234");
mysql_select_db("testdb");
mysql_query("SET NAMES UTF8");
?>

Bunları yaptıktan sonra Türkçe karakter problemiyle karşılaşmamanız gerekiyor…
 
Üst