CakePHP сохраняет значения в базу данных MySQL как значение в кодировке HTML - PullRequest
0 голосов
/ 19 августа 2010

Я пытаюсь сохранить некоторые значения из формы в CakePHP в базе данных MySQL, и когда значения попадают в базу данных, они получают кодировку html.

Таким образом, что-то вроде (# 45) сохраняется в базе данных как (# 45), а затем, когда кто-то пытается вернуться и редактировать форму, он видит все лишние символы.

Я попытался установить кодировку для соединения с базой данных на utf8 следующим образом:

private $production = array(
    'driver' => 'mysql',
    'persistent' => true,
    'host' => 'localhost:3306',
    'login' => '',
    'password' => '',
    'database' => 'db',
    'prefix' => '',
    'encoding' => 'utf8'
);

и установите это в моей конфигурации:

Configure::write('App.encoding', 'UTF-8');

, а также добавил это в мой макет по умолчанию:

echo $html->charset();

Есть идеи?

Ответы [ 4 ]

1 голос
/ 23 августа 2010

Я нашел, где происходило кодирование.В классе AppModel он вызывал Sanitize :: clean без 'encode', установленной в false

function beforeSave() {
    if (!empty($this->data)) {
        $this->data = Sanitize::clean($this->data, array('escape' => false, 'carriage' => true));
    }       
    return parent::beforeSave();
}

Как только я установил для encode значение false для метода clean, он работал правильно

function beforeSave() {
    if (!empty($this->data)) {
        $this->data = Sanitize::clean($this->data, array('escape' => false, 'carriage' => true, 'encode' => false));
    }       
    return parent::beforeSave();
}
1 голос
/ 20 августа 2010

Я подтвердил, что все настройки (database.php, core.php, default.ctp), которые вы сделали до сих пор, идентичны моим (за исключением того, что вы используете persistent = true, но это не должно быть проблемой imho). Установка базы данных и каждой таблицы вручную в utf8_unicode_ci (через PHPmyAdmin) - это единственное, что я сделал в дополнение к этому.
Я думаю, что следующий шаг даже не нужен, поскольку таблицы создаются в соответствии с кодировкой БД. Убедитесь, что БД и таблицы закодированы правильно, а затем убедитесь, что вы действительно используете этот параметр, если вы определили несколько соединений с базой данных.

1 голос
/ 19 августа 2010

Так как это еще дальше, довольно легко понять, где это происходит.Одно ленивое решение для отладки PHP:

print_r($data); die;

Но вы, вероятно, уже делаете это.

0 голосов
/ 19 августа 2010

сам mysql в UTF-8?выполните экспорт / дамп mysql и посмотрите, что он говорит после каждой таблицы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...