Mysql eklerken ZendFramework olmayan ilk az char dizeleri keser

2 Cevap php

Ben bazı veri eklediğinizde Zend_Form chrząszcz bana bu dizeyi keser ve veritabanına ben kaydettiğiniz gibi olmayan a-z karakterleri ile veritabanına yalnızca {[(3) }].

MySql olarak ayarlanır in Everyting utf8_general_ci, MySql I SET CHARACTER SET 'utf8', içerik çağrı ile bağlarken edilir da UTF-8 .

Ben ne ile yapmak için hiçbir fikrim yok.

Ben de bağımsız senaryoyu yazdı ve ekler ve bana doğru bu dizeyi okur. ZendFramework Doğru zamanda okur. Sorun yalnızca ekleme ile.

Herkes bunu düzeltmek için nasıl biliyor musunuz?

UPDATE:

: Ben ile veri takarsanız

$db->query("INSERT INTO unit SET name = 'chrząszcz'");

ZendFramework çalışır içinde. Sorun bu şekilde ekleme ile:

$unitTable = new Model_Unit_Table();
$unit = $unitTable->createRow();
$unit->setFromArray($form->getValues());
$unit->save();

UPDATE 2:

Problem is with using Zend_Filter_StringToLower - it modifies string chrząszcz into chrz�szcz.
How to get this filterto work correct ?

2 Cevap

Yorumlarınız yanıt:

No. var_dump of $form->getValue() gives chrz�szcz. When var_dump a $_POST superglobal it gives correct chrząszcz.

Bu çalışır mı?

$testArray = array('name' => 'chrząszcz');

$unitTable = new Model_Unit_Table();
$unit = $unitTable->createRow();
$unit->setFromArray($testArray);
$unit->save();

Eğer evet ise, sizin sorunla ilgili daha Zend_Form olabilir.

Edit:

Filtre yerine strtolower() ve mb_strtolower() kullanmak gerekiyor.

Edit2:

Bu deneyin:

$filter = new Zend_Filter_StringToLower();
$filter->setEncoding('UTF-8');

Bu bir kodlama sorunu eminim. Benim ilk şüphe olurdu dizeleri karakter en sık non-UTF8 bağlamda UTF-8 veri ekleme neden olur (yani ASCII karakter kümesi yukarıda) ilk standart dışı noktasında vazgeçtiklerini bu veritabanı bağlantısının kodlama düzgün ayarlanmamış.

  • Eğer $db->query("SET NAMES utf8"); ekleme komutları çağırmadan önce deneyebilir miyim?
  • Bağlantı Zend_Form kesinlikle kullanır $db?
  • Form UTF-8 kodlanmış olan sayfa% 100 emin misin?