Пишу простую гостевую книгу на 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"');
|
не помогло
|