Кодировка в POST

Различные вопросы по установке и настройке фреймворка, конфигурции веб-сервера и IDE.
Ответить
sphere89
Сообщения: 3
Зарегистрирован: 2013.12.20, 07:57

Кодировка в POST

Сообщение sphere89 »

Добрый вечер уважаемые, веду битву 5 часов с кодировкой в POST запросе, создаю IFRAME через JS, перенаправляю форму на него, отправляю JS-ом submit. В посте изображение, пару полей с русским utf8, пытался сам разобраться:

Первое, что я решил сделать, это проверить кодировку сервера 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');
    });
})($);
P.S: Вопрос не по теме, я недавно изучаю Yii. Как реиспользовать подобный загрузчик файлов? Какие могут быть варианты? Создать компонент, связать его с моделькой, поведение сделать? объясните пожалуйста.
Аватара пользователя
SiZE
Сообщения: 2818
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Кодировка в POST

Сообщение SiZE »

Попробуй в корень положить .htaccess А вообще проверь кодировку заданную в HTML, MySQL, Apache, кодировку файлов в редакторе

Код: Выделить всё

# utf8
AddDefaultCharset utf-8
AddCharset utf-8 *
<IfModule mod_charset.c>
CharsetSourceEnc utf-8
CharsetDefault utf-8
</IfModule> 
По поводу загрузчика читай больше http://yiiframework.ru/doc/cookbook/ru/ ... .fat.model

Ну и самое главное то ты не указал, где у тебя с кодировкой то проблемы? При записе в базу, при выводе из базы? и тп
sphere89
Сообщения: 3
Зарегистрирован: 2013.12.20, 07:57

Re: Кодировка в POST

Сообщение sphere89 »

Кодировка в POST теле, в записи BD, соответственно при чтении из BD.
Спасибо за ссылку, действительно многое можно убрать в модель и использовать в других контролерах загрузчик.
Аватара пользователя
SiZE
Сообщения: 2818
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Кодировка в POST

Сообщение SiZE »

Причем тогда пост запрос?
Jacqueline
Сообщения: 1
Зарегистрирован: 2015.01.21, 09:16

Re: Кодировка в POST

Сообщение Jacqueline »

Убираем явную фильтрацию ID. <controller:\w+>/<action:\w+>/<id>'=>'<controller>/<action>',
If you are looking for fast success in ccnp switch exam then join a plus to find complete ccna books free download - pass4-sure resources and pass www.ndm.edu certifications on first try. A person can pick Johnson University Florida
Ответить