Kohana ORM кодировка для испанских акцентов

У меня возникли некоторые проблемы при работе с ORM в Кохане, особенно когда я пытаюсь вставить / обновить данные с помощью специальных символов (испанские акценты) в моей базе данных.

Примечание: моя БД установлена ​​в кодировке UTF-8, это не проблема, пожалуйста, продолжайте читать:

Это функция, которую я использую для сохранения данных в моей модели:

class Model_Colaborador extends ORM {

    protected $_table_name = 'colaboradores';

    public function save_data($data, $id = 0)
    {
        if (empty($data))
            exit();

        $date = Date::formatted_time();

        $data['fecha_actualizacion'] = $date;

        if (empty($id))
            $data['fecha_creacion'] = $date;

        $data['estatus'] = 'active';

        if ( ! empty($id))
        {
            $this->where($this->_primary_key, '=', $id)->find();
            if ( ! $this->loaded())
                exit();
        }

        return $this->values($data)->save();

    }

}

Для сохранения / обновления данных в моем контроллере я использую это:

public function action_save()
{
     $id = $this->request->param('id');
     $data = $this->request->post();     // From the form

     Model::factory('colaborador')->save_data($data, $id);
}

Все прекрасно работает, но большая проблема в том, что некоторые поля поставляются с акцентами, например: Mamá (сохраняйте только Mam?? на моем столе, включая два знака вопроса в конце слова).

Теперь, если я использую класс БД работает отлично. Например:

class Model_Colaborador extends ORM {

    protected $_table_name = 'colaboradores';

    public function save_data($data, $id = 0)
    {
        if (empty($data))
            exit();

        $date = Date::formatted_time();

        $data['fecha_actualizacion'] = $date;

        if (empty($id))
            $data['fecha_creacion'] = $date;

        $data['estatus'] = 'active';

        // Only an Insert for the example
        DB::insert($this->_table_name, array_keys($data))->values($data)->execute();

    }

}

Теперь данные сохраняются в правильном формате, например: Mamá (включая испанский акцент).


Теперь я сделал "решение" для этого, но, я думаю, есть способ исправить мою проблему (это причина, по которой я здесь). Я добавил в свою модель фильтр, чтобы исправить все данные перед сохранением в БД, например:

public function filters()
{
        return array(
            TRUE => array(
                array('trim'),
                array(array($this, 'encoding'))
            ),
        );
}

обратный вызов для пользовательского фильтра:

public function encoding($value)
{
        return mb_convert_encoding($value, 'HTML-ENTITIES', 'UTF-8');  // Using mbstring
}

И данные сохраняются в моей базе данных как: Mam & eacute; (без пробелов, stackru конвертирует его).

Надеюсь, вы понимаете, что я пытаюсь сделать. Я искал как сумасшедший, и этот случай довольно странный....

Большое спасибо за чтение этого.

Хорошего дня.

2 ответа

Вы убедились, что пользовательский ввод в UTF-8? Иногда браузеры отправляют данные в формате, который вы не готовы принять.

Проверьте вставленный объект ORM values от:

$this->values($data);

var_dump($this);

Это в конце вашего save_data метод. Вы должны увидеть ваши назначенные (еще не сохраненные данные) в частном порядке $_object свойство объекта ORM.

Другие вопросы по тегам