У меня есть веб-сайт с арабским контентом, который был перенесен с другого сервера. На старом сервере все отображалось правильно, предположительно все кодировалось UTF-8.PHP/MySQL Encoding
На текущем сервере данные начали неправильно отображаться, показывая Ü † Ø¨Ø ° Ø © Ø¹у † и аналогичные символы.
Приложение основано на CakePHP Framework.
После многих испытаний я изменил параметр 'encoding'
в массиве соединений MySql, чтобы стать «latin1». Для людей, которые не знают CakePHP, это устанавливает кодировку соединения MySql. Установка этого значения в UTF8 ничего не изменила, даже после шагов, описанных ниже.
Некоторые из записей начали правильно отображаться на арабском языке, в то время как другие оставались тарабарщиной.
Я уже прошел через все проверки базы данных и сервера, подтверждая, что:
- база данных создана в UTF-8.
- Таблица UTF-8.
- В столбцах явно не указывается какая-либо кодировка, закодированная в UTF-8.
- Набор символов по умолчанию в РНР настройки mysql.cnf UTF-8
- по умолчанию UTF-8
После этого я восстановил мои данные и петельные через него, выводя кодирование каждой строки (из каждая строка) с использованием mb_detect_encoding
. Строки, которые отображаются правильно, возвращают UTF8, пока он ничего не возвращает для поврежденных строк.
Данные веб-сайта были отредактированы на нескольких типах, возможно с различными кодировками, это то, что я точно не знаю. Однако я могу подтвердить, что только 2 кодирования, которые эти данные могли пройти, - это UTF-8
и latin1
.
Есть ли способ восстановить данные, когда mb_detect_encoding
ничего не возвращает, а текущий набор данных неизвестен?
ОБНОВЛЕНИЕ: Я выяснил, что, когда база данных была активна на новом сервере, my.cnf был обновлен. Приведенная ниже директива была изменена:
символьный набор-сервер = utf8
Для
по умолчанию-символьный набор = utf8
Я не уверен, насколько это имеет значение, хотя.
Проверяя измененные даты, я могу с уверенностью сказать, что данные, которые я мог восстановить, не были отредактированы на новом сервере, а данные, которые я не смог получить, были отредактированы.
если у вас есть phpmyadmin .. вы можете увидеть свои данные в таблицах ... правильно ли они отформатированы .. я имею в виду арабские символы ?? –
Нет, данные повреждены внутри phpmyadmin. Я на самом деле выводю данные, которые я читаю, и он поврежден, поэтому это в основном та же логика. – Adon
, если данные повреждены внутри вашей базы данных .. это означает, что ваша проблема не в Cackephp .. это из самой базы данных. Экспорт вашей базы данных снова с старого сервера с UTF8 –