Вывод символов Unicode в CakePHP и Mysql

У меня есть сайт, реализованный в Cakephp 2 года назад для моего клиента. В то время я не знал, что сайт будет использоваться во всем мире. Из-за разных стран на сайте были использованы специальные символы. В то время опция cakephp utf8 не была включена, и символы сохранялись в кодированной форме, например ?? в базе данных.

Теперь, когда мы пытаемся загрузить CSV, эти символы создавали проблему и не отображались правильно в CSV. Я много пробовал решить это, но не удалось.

Пожалуйста, помогите мне, как это решить.

2 ответа

Вы должны обеспечить 3 things-

1. enable ''encoding' => 'utf8',' on database settings at 'app/Config/database.php'
2. Table column Collation must be set to 'utf8_general_ci' or 'utf8_unicode_ci'
3. Html page character set must set as 'utf-8'


Используйте "Ниже запроса", чтобы получить текущую информацию о сортировке для ваших таблиц,

select TABLE_NAME,TABLE_TYPE,ENGINE,TABLE_COLLATION from information_schema.TABLES where TABLE_SCHEMA like 'YOURDATABASENAME';

Столбец "TABLE_COLLATION" предоставит вам информацию о сортировке. Если он установлен на utf8, то почти все символы могут быть сохранены в вашей БД и могут быть возвращены обратно. Проблема, с которой вы столкнулись в настоящее время, может быть вызвана проблемами с PHP или браузером. Но если ваша БД имеет различную сортировку, которая не поддерживает все символы, то данные, сохраненные в этой БД, вероятно, потеряны. Практически невозможно определить тип кодировки и вернуть его обратно.

Для будущих случаев у вас есть два варианта:

Вы можете установить UTF-8 в качестве сводки DB, но если вы проиндексировали свои строковые данные, то для каждого символа процесс MySQL будет содержать 4 байта, хотя UTF-8 - это кодирование с переменной длиной. Таким образом, это может увеличить ваш Использование памяти.

Или

Вы можете установить latin1 в качестве своего DB Collation, и вам придется кодировать символы с UTF-8 на латинский и сохранять их в БД. Это уменьшит использование памяти, но у вас будет надпись "Кодирование/декодирование". Если английский является основным языком в вашей БД, я бы сказал, что вы можете пойти на это.

Это зависит от языка, который необходимо сохранить в вашей БД, и когда он отображается в браузере, браузер должен установить поддерживаемую кодировку. В вашем случае, если вы загружаете их как CSV, это зависит от формата кодировки, заданного для файла.

licensed under cc by-sa 3.0 with attribution.