Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не приходят русские символы, из базы 
V
    Опции темы
Goganchic
Дата 12.12.2008, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 678
Регистрация: 18.6.2004

Репутация: нет
Всего: 5



Пишу простую гостевую книгу на Zend Framework-е. Тестирую на Денвере. База "MySQL 5.0.45-community-nt", кодировка CP1251
Когда выкладываю данные в базу - все нормально (в PHPMyAdmin - все отображается как и должно быть), а когда делаю select из базы то сообщения в которых только латиница приходят нормально, а сообщения в которых есть кириллица - приходят пустыми.
Соответственно, вот контроллер, bootstrap и Model

Код

<?php

/**
 * RecordController
 * 
 * @author
 * @version 
 */

require_once 'Zend/Controller/Action.php';

class RecordController extends Zend_Controller_Action {
    /**
     * The default action - show the home page
     */
    public function indexAction() {
    
    }
    
    /**
     * Add new record
     */
    public function newAction() {
        $request = $this->getRequest();
        
        // Get parameters from request
        $user_name = $request->getParam('user_name');
        $email = $request->getParam('email');
        $message = $request->getParam('message');
        
        // Create user name validator (spaces are possible)
        $user_name_validator = new Zend_Validate_Alnum(true);
        // Create email validator
        $email_validator = new Zend_Validate_EmailAddress();
        
        // Valiate User name
        if (!$user_name_validator->isValid($user_name)) {
            $this->view->assign('status', 'Что-то не так с именем пользователя');
            return;
        }
        
        // Validate email
        if (!$email_validator->isValid($email)) {
            $this->view->assign('status', 'Что-то не так с email-ом');
            return;
        }
        
        // Create tags filter
        $message_filter = new Zend_Filter_StripTags();
        // Strip html tags
        $message = $message_filter->filter($message);
        
        // Validate message
        if ('' == $message) {
            $this->view->assign('status', 'Пустое сообщение');
        }
        
        $records = new Records();
        $records->insert(array('user_name' => $user_name, 'email' => $email, 'message' => $message));
        
        $this->view->assign('status', 'Запись успешно добавлена');
    }
    
    /**
     * Get record from DB
     */
    public function getAction() {
        $this->_helper->viewRenderer->setNoRender();
        $this->_helper->layout()->disableLayout();
        
        $first_id = (int)($this->getRequest()->getParam('first_id'));
        $count = (int)($this->getRequest()->getParam('count'));
        
        // Simple validation
        if ($first_id < 0) {
            $first_id = 0;
        }
        
        if ($count <= 0) {
            $count = 30;
        }
        
        $records = new Records();
        
        $result = array();
        
        $result['count'] = $records->select("count (*)")->query()->fetchColumn();
        $result['data'] = $records->fetchAll("id >= $first_id", 'id', $count)->toArray();
        
        $output = Zend_Json::encode($result);
        
        $response = $this->getResponse();
        $response->setBody($output);
    }
}
?>




Код

<?php
/**
 * My new Zend Framework project
 * 
 * @author  
 * @version 
 */

set_include_path('.' . PATH_SEPARATOR . '../library' . PATH_SEPARATOR . '../application/default/models/' . PATH_SEPARATOR . get_include_path());
require_once 'Zend/Controller/Front.php';
require_once 'Zend/Layout.php';
require_once 'Zend/Loader.php';

Zend_Loader::registerAutoload();

// Setup DB
$config = new Zend_Config_Ini('../config.ini', 'general');
$db = Zend_Db::factory($config->db->adapter, $config->db->config->toArray());
Zend_Db_Table::setDefaultAdapter($db);

// Setup controller
$controller = Zend_Controller_Front::getInstance();
$controller->setControllerDirectory('../application/default/controllers');
$controller->throwExceptions(false); // should be turned on in development time 

// bootstrap layouts
Zend_Layout::startMvc(array(
    'layoutPath' => '../application/default/layouts',
    'layout' => 'main'
    ));

// run!
$controller->dispatch();




Код

<?php

/**
 * Records
 *  
 * @author Egor
 * @version 
 */

require_once 'Zend/Db/Table/Abstract.php';

class Records extends Zend_Db_Table_Abstract {
    /**
     * The default table name 
     */
    protected $_name = 'records';
    
    /**
     * Insert new row
     *
     * Ensure that a timestamp is set for the created field.
     * 
     * @param  array $data 
     * @return int
     */
    public function insert(array $data) {
        $data['rec_date'] = date('Y-m-d H:i:s');
        return parent::insert($data);
    }

}


P.s. в Zend Framework я новичок, так что если будут какие-то общие советы по коду - буду очень рад услышать.
P.s.s. пробовал в Bootstrap прописывать 
Код

$db->query('SET CHARACTER SET cp1251');


и

Код

$db->query('SET names "cp1251"');


не помогло
PM Jabber   Вверх
Goganchic
Дата 13.12.2008, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 678
Регистрация: 18.6.2004

Репутация: нет
Всего: 5



наткнулся на просторах Интернета на забавный факт:
Цитата

json_encode не поддерживает windows-1251, в этом то и проблема…


проверил, это действительно так...
вопрос решился переделкой гостевой книги на UTF8
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.