• 17-01-2013, 09:44:59
    #1
    Arkadaşlar merhaba,

    Spreadsheet Excel Reader sınıfını kullanarak php ile bir excel dosyasındaki verileri okutup Mysql veritabanına kaydediyorum. Kayıt işlemi sorunsuz çalışıyor fakat şöyle bir sorun var;

    Normalde Türkçe karakter desteği için döngünün dışına
    $connection->setOutputEncoding('iso-8859-9');
    kodunu ekliyorum.

    Daha sonra döngü içinde her satırı çekişimde şu şekilde çekiyorum;
    $veri = mb_convert_encoding($connection->sheets[0]['cells'][$i][7],"utf-8","iso-8859-9");
    Bu işlem tüm kayıtlardaki Türkçe karakterleri düzgün biçimde gösteriyor. İşin tuhaf tarafı ise, çok fazla sayıda veri içeren excel dosyası yüklemeye çalıştığımda yaklaşık 150. satırdan itibaren Türkçe karakterleri bozuk göstermeye başlıyor. Döngü sayısı artınca sistem bozuluyor.

    Bozuk gösterdiği satırları ilk sıraya taşıyıp denediğimde sorun gözükmüyor.

    Buna nasıl bir çözüm bulabiliriz_?
  • 17-01-2013, 18:49:56
    #2
    güncel
  • 19-01-2013, 11:01:49
    #3
    oleread.inc dosyasındaki GetInt4d functionunu buraya kopyalayabilirmisiniz
  • 22-01-2013, 16:03:57
    #4
    @felix59 kullandığım sınıfta problem falan yok. Senin dediğin gibi xml den kayıt eklettim. Aynı şekilde 166. satırdan itibaren Türkçe karakterleri bozuk kaydetti.

    @zorox Fonksiyonu buraya yazıyorum;
    function GetInt4d($data, $pos)
    {
    	$value = ord($data[$pos]) | (ord($data[$pos+1])	<< 8) | (ord($data[$pos+2]) << 16) | (ord($data[$pos+3]) << 24);
    	if ($value>=4294967294)
    	{
    		$value=-2;
    	}
    	return $value;
    }
  • 22-01-2013, 16:16:24
    #5
    dün bende bi projede lazım oldu kullandım tr karakter sorunu bende yaşadım sorunu şu şekilde hallettim belki işine yarar...

    excel class klasorü içindeki dosyalarım

    Excel
    ->oleread.inc
    ->reader.php

    excel dosyasını mysql e insert ederken...

    // okurken
    header("Content-Type: text/html; charset=ISO-8859-9");
    require_once ("Excel/reader.php");
    $data = new Spreadsheet_Excel_Reader();
    $data->setUTFEncoder('iconv');
    $data->setOutputEncoding('ISO-8859-9');
    $data->read($dosya);

    // insert ederken
    mysql_query("SET NAMES 'LATIN5'");
    $ekle = mysql_query("INSERT INTO iw_sebze SET urun='".$ad."', birim='".$birim."', fiyat='".$fiyat."'");


    son olarak tablodanu "latin5_turkish_ci" yap.