Я вижу версии этого вопроса на SO, поэтому я попытаюсь быть в курсе того, что здесь происходит.
У нас есть приложение Cake 1.2.5, подключенное к базе данных MySQL 5.1.Исходная база данных и таблица, в которую я пытаюсь писать, были Latin-1, но я изменил базу данных, таблицу и столбец на UTF-8 (насколько я понимаю, это не имеет значения, но я включаю его)ради полноты).
Проблема заключается в том, что пользователь Windows, который вводит в нашу форму знак тире (полученную с помощью MS Word, автоматически исправляющего дефис), получает в базе данных байт x96
(просматривается с помощью шестнадцатеричного редактора в режиме hexl в Emacs), который является точкой кода для черточки в кодировке Windows 1252 (и в значительной степени недопустимой в других распространенных кодировках).
Изначально я думал, что это проблемас вводом формы, поэтому я сделал обычный раунд изменения заголовка Content-Type, проверки метатегов, добавления accept-charset к тегу формы, ни один из которых ничего не сделал, но затем я попытался сбросить данные, которые я получалформа в файл перед сохранением в базе данных, и она правильно сохраняет кодовую точку UTF-8 для en dash xe2x80x93
(рассматривается аналогично),поэтому я считаю, что проблема возникает, когда Cake общается с базой данных.
То, что я пробовал:
- Добавлено
'encoding'=>'utf8'
в определение соединения в app / config / database.php. - Добавлен
Configure::write('App.encoding', 'UTF-8');
в app / config / core.php. - Добавлен
mb_internal_encoding('UTF-8');
в app / config / core.php.
Дополнительнона возможные ответы мне интересно услышать о любых предположениях, которые я сделал в этом процессе, которые являются недопустимыми, а также о методах просмотра состояния данных на различных этапах процесса.