Проблема с кодировкой utf-8 с использованием PHP + MySQL - PullRequest
17 голосов
/ 10 ноября 2009

Я переместил данные с MySQL 4 (изначально они были установлены на latin2 encoding) на MySQL 5 и установил кодировку на utf-8. Выглядит хорошо в phpMyAdmin, а utf-8 в порядке. Однако на сайте есть знаки вопроса вместо некоторых символов! Кодировка сайта также установлена ​​на utf8, поэтому я не понимаю, в чем проблема.

Для файлов

PHP и HTML также установлено значение utf8 .

Понятия не имею ...

Ответы [ 10 ]

29 голосов
/ 10 ноября 2009

Попробуйте запрос

SET NAMES utf8

перед любым запросом в вашем приложении

19 голосов
/ 06 января 2012

На моем сервере добавление этих файлов в мой php-файл не имело никакого эффекта:

ini_set('default_charset','utf-8');
mysql_set_charset('utf8');
header('Content-type: text/html; charset=utf-8');

Но все заработало отлично, как только я добавил это в начало моего php-файла:

$mysqli->query("SET NAMES 'utf8'");

Примечание: я использую кодировку utf8_general_ci в своей базе данных, но utf8_unicode_ci работает для меня так же.

Надеюсь, это поможет.

13 голосов
/ 10 ноября 2009

Попробуйте установить подключение MySQL к UTF-8:

SET NAMES 'utf8'

И отправляйте явные заголовки UTF-8, на случай, если на вашем сервере есть другие настройки по умолчанию:

header('Content-type: text/html; charset=utf-8');
3 голосов
/ 10 ноября 2009

Вам не нужно устанавливать файлы PHP и HTML на utf-8.

Вам просто нужно установить выходную кодировку в UTF-8, и браузер будет отображаться соответствующим образом.

В HTML:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

В PHP:

header('Content-Type: text/html; charset=UTF-8');

Когда вы получите строку UTF-8 из таблицы MySQL, это будет UTF-8 вплоть до вывода в браузере, если вы не конвертируете кодировку. Это способ, которым браузер интерпретирует это.

2 голосов
/ 15 марта 2014
mysql_query("SET NAMES UTF8");

добавление этой строки в конце моего "connection.php" решило мою проблему.

Полный код моего файла подключения:

<?php
# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
$hostname_test = "localhost";
$database_test = "test";
$username_test = "username";
$password_test = "password";
$test = mysql_pconnect($hostname_test, $username_test, $password_test) or trigger_error(mysql_error(),E_USER_ERROR); 
mysql_query("SET NAMES UTF8");
?>

Моя сортировка базы данных: "utf8_general_ci".

Страницы - это "dreamweaver default utf8" и "Форма нормализации Юникода = C (каноническая декомпозиция)".

2 голосов
/ 08 января 2013

Когда вы показываете символы UTF8 на веб-сайте, но говорите браузеру интерпретировать их как Latin1 (или Latin2), вы видите этот вид абсурда: ß

Когда вы показываете символы Latin1 (или Latin2) на веб-сайте, но говорите браузеру интерпретировать их как UTF8, вы видите знаки вопроса.

Таким образом, я предполагаю, что вы переключили все на UTF8 (я имею в виду, вы сказали DB Engine, веб-серверу и браузеру, что вы будете использовать UTF8), но на самом деле вы не конвертировали строки в UTF8.

Делай, что сказал @Darkerstar. Конвертируйте ваш дамп в UTF8 (Notepad ++ может сделать это легко) и импортируйте его снова.

2 голосов
/ 25 октября 2011

Вот исправление. Установите заголовок на header ('Content-type: text/html; charset=utf-8'); Затем распечатайте свой контент, используя utf8_decode($content). Вы должны иметь два, чтобы заставить это работать.

2 голосов
/ 05 декабря 2009

Поместите файл .htaccess в корень вашего сайта с содержанием: AddDefaultCharset UTF-8

и

в вашем наборе dbconfig после подключения к db:

mysql_query ("SET NAMES 'utf8'");

1 голос
/ 08 июля 2015

Не похоже, что для каждой базы данных, таблицы и поля SQL установлено значение UTF-8 в MySQL, и это достаточно хорошо. Очень раздражает.

Закончено принудительное решение проблемы с кодировкой:

Пришлось использовать это Каждое место, где я открываю базу данных: $ Db-> set_charset ( "utf8");

И это сработало. Наконец-то.

1 голос
/ 10 ноября 2009

У меня недавно была эта проблема (надеюсь, это та же проблема, что и у вас), я пробовал много способов, но в конце концов получилось очень просто.

Конвертируйте ваш файл SQL в формат UTF-8, а затем импортируйте его.

BW: я использовал Notepad ++ для преобразования.

...