PHP 5.6 кодировка latin1 MySQL кодировка

После перехода с PHP 5.3 на PHP 5.6 у меня возникла проблема с кодировкой. Моя база данных MySQL — latin1, а мои файлы PHP — в windows-1251. Теперь все отображается как «ñëåäíèòå àäðåñè» или « ».

В кириллице должно отображаться что-то вроде «кирилица». Я пробовал mysqli_set_charset, но это не решило мою проблему.

1

Решение

Во-первых, давайте посмотрим, что у вас есть в таблице. Делать SELECT col, HEX(col)... чтобы увидеть, как они закодированы. Вот HEX, который должен быть там, если он правильно закодирован в utf8:

ñëå -> C3B1C3ABC3A5; кир -> D0BAD0B8D180

Если вы не получили их, то проблема заключалась в вставке, и мы можем (или не можем) восстановить данные. Если у вас есть C390C2BAC390C2B8C391E282AC для кириллицы у вас есть «двойное кодирование», и для «исправления» потребуется определенная работа.

utf8 нужно установить примерно в 4 местах.

  • Столбцы в базе данных — Использование SHOW CREATE TABLE чтобы убедиться, что они явно установлены в utf8, или по умолчанию из определения таблицы. (Недостаточно изменить базу данных по умолчанию.)
  • Связь между клиентом и сервером. Увидеть SET NAMES utf8,
  • Байты у вас есть. (Это, вероятно, так.)
  • Если вы отображаете текст на веб-странице, проверьте <meta> тег.
1

Другие решения

Хэлфер прав. Измените кодировку PHP и MySQL, сначала PHP с

mb_internal_encoding ("UTF-8");
mb_http_output("UTF-8");

в UTF-8, в верхней части ваших страниц PHP.

Если вы пропустите "UTF-8" и выведите результат этих вычислений, он покажет текущую кодировку PHP — возможно, windows-1251

Также обратите внимание, что в MySQL необходимо изменить кодировку символов в строке в таблице, а также в самой таблице в целом и в самой базе данных в целом, так как значения по умолчанию останутся latin1 поэтому любые новые поля, которые вы добавляете, будут latin1 без тщательной проверки.

Если вы пытаетесь сохранить текст Cryllic в базе данных, вам потребуется правильный набор символов Cryllic в базе данных, а не латиница 1

0

По вопросам рекламы [email protected]