Первое, что я решил сделать, это проверить кодировку сервера mysql на ubuntu 1.12.
mysql> show variables like "char%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
Вроде все ок.
2) Дальше думаю может база сломана, удалил, создал заного в терминале руками, козябрики в поле комментарий, название - фото.
3) Хорошо, наверное в конфиге не указал utf8, пошел в конфиг приложения, все ок.
4) Дальше думаю, наверное заголовок не правильный, смотрю header('Content-Type: text/html; charset=utf-8');
Взорвался мозг, просто кипит, однако я вижу в Firebug, что POST уже идет в козябриках, причем jquery который декодит JSON возращает нормальный русский текст.
Помогите пожалуйста, какие еще могут быть варианты, может что-то я упустил.
Код: Выделить всё
#controller action
public function actionUpload() {
header('Content-Type: text/html; charset=utf-8');
$FileUploadModel = new FileUpload();
$ext = null;
$clearUrl = null;
$post_data = Yii::app()->request->getParam('FileUpload', null);
if (isset($_POST['FileUpload'])){
$FileUploadModel->setAttribute('name', $_POST['FileUpload']['name']);
$image = CUploadedFile::getInstance($FileUploadModel, 'image');
if (is_object($image) && get_class($image) === 'CUploadedFile') {
switch ($image->getType()) {
case 'image/jpeg':
$ext = '.jpg';
break;
case 'image/png':
$ext = '.png';
break;
}
$filename = uniqid() . $ext;
$url = Yii::getPathOfAlias('webroot') . '/images/' . $filename;
$clearUrl = '/images/' . $filename;
$FileUploadModel->setAttribute('url', $clearUrl);
$FileUploadModel->setAttribute('image', $image);
$FileUploadModel->setAttribute('comment', $post_data['comment']);
}
if ($FileUploadModel->save()) {
if (is_object($image)) {
$FileUploadModel->image->saveAs($url);
}
}
$data = array(
'url' => $clearUrl,
'name' => $_POST['FileUpload']['name']
);
$this->layout=false;
echo CJSON::encode($data);
Yii::app()->end();
}
}
#model
class FileUpload extends CActiveRecord {
public $image;
public $name;
public $url;
public $camera;
public $id;
public $lens;
public $comment;
public $position;
public $viewed;
public $ser_id;
public $tag;
public $category;
public function tableName(){
return 'Item';
}
public function rules(){
return array(
array('image','file','types'=>'jpg, gif, png')
);
}
}
Код: Выделить всё
(function($){
"use strict";
var ajaxFileUpload = function(form, element, template, action) {
var form = form,
iframe,
newdata,
count = 0,
id;
function createIframe(){
id = 'f' + Math.floor(Math.random() * 999999);
iframe = $('<iframe/>');
iframe.attr('id', id);
iframe.attr('src', action);
iframe.attr('name', id);
iframe.attr('style','display: none');
form.append(iframe);
form.attr('action', action);
form.attr('target', id);
}
function createNewImage(data, element) {
/* Handlebars.js */
var source = template.html(),
rendertpl = Handlebars.compile(source);
element.append(rendertpl(data));
}
createIframe();
iframe.on('load', function(){
if(iframe.contents().text().length !== 0) {
newdata = JSON.parse(iframe.contents().text());
count++;
newdata.count = count;
if (newdata.url !== null) {
createNewImage(newdata, element);
}
}
});
};
$(document).ready(function() {
// TODO: Убрать привязку к DOM дереву и переменные
ajaxFileUpload($('#file-upload-form') , $('.Photos'), $('#Uploaded_Images'), 'upload');
});
})($);