Profil detayı eklendi, herkes profillerine girip bir gözatsın! Sevdiğiniz üyelerin cevaplarını takip edin! Tüm güncellemeler

Codeigniter Arapça Karakterlerin ? Karakterlerine Dönmesi Sorunu [ÇÖZÜLDÜ]

Codeigniter 3 kullanıyorum. MSSQL veritabanına Türkçe, İngilizce ve Arapça veriler kaydetmeye çalışıyorum.

Normalde veritabanı Arapça karakterleri kabul ediyor ama Codeigniter ile kaydetmeye çalıştığım zaman tüm Arapça karakterler ? karakterlerine dönüşüyor.

$this->db->update(
    'Table1', 
    array('column1'=>'اأآؤءئبتثجحخدذرزسشـصضطظعغفقكلمنهوية'), 
    array('Id=>$id)
);

Veritabanına kaydolduğunda ??????????????????????????????????? haline dönüşüyor.


Bu veriyi direkt veritabanına yazıp kaydettiğimdeyse düzgün şekilde kaydoluyor.

Yani codeigniter bu karakterleri ? karakterlerine çeviriyor.


database.php ayarlarım şöyle:

$db['default'] = array(
   'dsn'  => 'sqlsrv:server=<Sunucu IP Adresi>;Database=<Veritabanı Adı>;',
   'hostname' => '<Sunucu IP Adresi>',
   'username' => '<Kullanıcı Adı>',
   'password' => '<Şifre>',
   'database' => '<Veritabanı Adı>',
   'dbdriver' => 'pdo',
   'dbprefix' => '',
   'pconnect' => FALSE,
   'db_debug' => (ENVIRONMENT !== 'production'),
   'cache_on' => FALSE,
   'cachedir' => '',
   'char_set' => 'utf8',
   'dbcollat' => 'utf8_unicode_ci',
   'swap_pre' => '',
   'encrypt' => FALSE,
   'compress' => FALSE,
   'stricton' => FALSE,
   'failover' => array(),
   'save_queries' => TRUE
);


Bunu nasıl önleyebilirim?


--- SORUNU ÇÖZDÜM ---


Update işlemini direkt sorgu ile yazmam gerekti. Şöyle:


// Açık vermemek için normalde dışarıdan aldığım Arapça veriyi temizliyorum.

$data = $this->db->escape_str('اأآؤءئبتثجحخدذرزسشـصضطظعغفقكلمنهوية');


// Id verisi de eğer sayısal olarak gelmemişse diye onu da çeviriyorum.

$id = (int)$id;


$this->db->query("UPDATE Table1 SET Column1=N'$data' WHERE Id=$id");


db->update() ile işlemi yaptığımda Column1='...' şeklinde sorgu üretiliyor.


Ben direkt sorgu yazdığımda N ifadesini de ekleyebildim ve Column1=N'...' elde ettim.


Sorguyu buna göre gönderdiğimde işlem çalıştı. Demek ki sorun codeigniter'dan değil veritabanından kaynaklanıyormuş. Ama codeigniter'da activerecord ile bu string başına N ekleme işlemini nasıl yapabilirdim bilmiyorum. 


Bu sorun sanırım MySql için oluşmuyor. MsSql'le çalıştığım için böyle bir sorun yaşadım diye düşünüyorum.


1

Cevaplar (1)

İşlem devam ediyor, lütfen bekleyin..
Sedat BAŞ
Doğru Cevap
@idvlprs
3 ay önce

https://forum.codeigniter.com/archive/index.php?thread-43732.html

Cevapla @ebykdrms3 ay önce
Teşekkür ederim @idvlprs. Burada database.php ayarlarında zaten yaptığım bazı ayarları yapmam gerektiğinden bahsediyor.

Sorunu çözdüm. Update işlemini direkt sorgu ile yazmam gerekti. Şöyle:

// Açık vermemek için normalde dışarıdan aldığım Arapça veriyi temizliyorum.
$data = $this->db->escape_str('اأآؤءئبتثجحخدذرزسشـصضطظعغفقكلمنهوية');

// Id verisi de eğer sayısal olarak gelmemişse diye onu da çeviriyorum.
$id = (int)$id;

$this->db->query("UPDATE Table1 SET Column1=N'$data' WHERE Id=$id");

db->update() ile işlemi yaptığımda Column1='...' şeklinde sorgu üretiliyor.

Ben direkt sorgu yazdığımda N ifadesini de ekleyebildim ve Column1=N'...' elde ettim.

Sorguyu buna göre gönderdiğimde işlem çalıştı. Demek ki sorun codeigniter'dan değil veritabanından kaynaklanıyormuş. Ama codeigniter ile bu string başına N ekleme işlemini nasıl yapabilirdim bilmiyorum.

Bilenler yorum atarsa bilgileniriz. :)
Cevapla @ebykdrms3 ay önce
Bu sorun sanırım MySql için oluşmuyor. MsSql'le çalıştığım için böyle bir sorun yaşadım zannedersem...
İşlem devam ediyor, lütfen bekleyin..

Cevap yaz Sadece sorunun cevabını yazın

Yabancı Dizi Arşivi