После перехода с PHP 5.3 на PHP 5.6 у меня возникла проблема с кодировкой. Моя база данных MySQL — latin1, а мои файлы PHP — в windows-1251. Теперь все отображается как «ñëåäíèòå àäðåñè» или « ».
В кириллице должно отображаться что-то вроде «кирилица». Я пробовал mysqli_set_charset, но это не решило мою проблему.
Во-первых, давайте посмотрим, что у вас есть в таблице. Делать SELECT col, HEX(col)...
чтобы увидеть, как они закодированы. Вот HEX, который должен быть там, если он правильно закодирован в utf8:
ñëå
-> C3B1C3ABC3A5
; кир
-> D0BAD0B8D180
Если вы не получили их, то проблема заключалась в вставке, и мы можем (или не можем) восстановить данные. Если у вас есть C390C2BAC390C2B8C391E282AC
для кириллицы у вас есть «двойное кодирование», и для «исправления» потребуется определенная работа.
utf8 нужно установить примерно в 4 местах.
SHOW CREATE TABLE
чтобы убедиться, что они явно установлены в utf8, или по умолчанию из определения таблицы. (Недостаточно изменить базу данных по умолчанию.)SET NAMES utf8
,<meta>
тег.Хэлфер прав. Измените кодировку 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