ZendFramework вырезает строки из первого не a-z символа при вставке в mysql - PullRequest
1 голос
/ 15 января 2010

Когда я вставляю некоторые данные с Zend_Form в базу данных с не a-z символами, такими как chrząszcz, это обрезает мне эту строку, и в базе данных я сохранил только chrz.

Everyting in MySql устанавливается как utf8_general_ci, при соединении с MySql я звоню SET CHARACTER SET 'utf8', файлы также UTF-8.

Понятия не имею, что с этим делать.

Я также написал отдельный скрипт, который вставляет и читает мне эту строку правильно. ZendFramework читает это тоже правильно. Проблема только со вставкой.

Кто-нибудь знает, как это исправить?

UPDATE:

Если я вставлю данные с:

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

в ZendFramework это работает. Проблема с вставкой таким образом:

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

ОБНОВЛЕНИЕ 2:

Проблема в использовании Zend_Filter_StringToLower - он изменяет строку chrząszcz на chrz�szcz.
Как заставить этот фильтр работать правильно?

Ответы [ 2 ]

3 голосов
/ 15 января 2010

Отвечая на ваш комментарий:

Нет. var_dump из $ form-> getValue () дает chrz szcz. Когда var_dump $ _POST суперглобальный даёт правильный chrząszcz.

Это работает?

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

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

Если да, возможно, ваша проблема связана с Zend_Form.

Изменить:

Ваш фильтр должен использовать mb_strtolower () вместо strtolower () .

Edit2:

Попробуйте это:

$filter = new Zend_Filter_StringToLower();
$filter->setEncoding('UTF-8');
0 голосов
/ 15 января 2010

Я почти уверен, что это проблема кодирования. Строки, выпадающие в точке первого нестандартного (т. Е. Выше набора символов ASCII), чаще всего вызваны вставкой данных UTF-8 в контекст, отличный от UTF8, поэтому мое первое подозрение заключается в том, что кодирование соединения с базой данных установлен неправильно.

  • Можете ли вы попробовать $db->query("SET NAMES utf8"); перед вызовом команд вставки?
  • Использует ли Zend_form соединение определенно $db?
  • Вы на 100% уверены, что страница, на которой находится ваша форма, имеет кодировку UTF-8?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...