При открытии страницы в браузере кодировка не та. Похожая ситуация тут http://forum.php.su/topic.php?forum=1&topic=7133 У меня везде где только можно (см.ниже пронумерованные пункты) прописана кодировка utf-8. При открытии страницы в браузере, браузер автоматически берет кодировку "utf-8". Название страницы на русском языке (название страницы берется НЕ из базы данных), однако содержание страницы в непонятных символах (содержание страницы вытягивается запросом из базы данных). Если в браузере выбираю кодировку "windows-1251", то все меняется наоборот- название страницы на непонятном языке, а содержание страницы на русском. Подробнее про настройки: 1)- При открытии файла *php в noutpad++ программа показывает кодировку "utf-8 без DOM"; 2)- В самом файле *.php прописано <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 3)- В директории сайта лежит файл ".htaccess", в котором написано "AddDefaultCharset UTF-8"; 4)- Если открыть myphpadmin то он показывает кодировку таблиц "utf8_general_ci"; Решение я нашел, прописав после подключения к базе код "mysql_query("SET NAMES utf8;");", но вот первоисточник проблемы не понимаю. Вопрос следующий: почему у меня была данная проблема? Как можно было исправить данную ошибку без "mysql_query("SET NAMES utf8;");"?
ну если коротко, то никак, а если по-нормальному, то только (используя mysqli) через специальный метод выставления кодировки общения с сервером. ну или в конфиге. хз где там это. выставляю при каждом подключении. Может кому пригодится: Код (PHP): public static function Init() { if (!static::$inited) { SLT::SectionStart(__CLASS__ . "::Init()"); //вместо ворнингов в лог мускул будет кидать эксепшены mysqli_report(MYSQLI_REPORT_STRICT); try { ThrowOnTrue(empty(static::$settings), 'No DB settings.'); SLT::Step('Connecting...'); static::$connect = new mysqli(static::$settings['host'], static::$settings['login'], static::$settings['password'], static::$settings['dbname'], static::$settings['port'], static::$settings['socket']); SLT::Step('Connected (' . static::$connect->host_info . ')'); static::$connect->query("SET NAMES '" . static::$settings['codepage'] . "'"); ThrowOnFalse(static::$connect->set_charset(static::$settings['codepage']), 'Не могу установить требуемую кодировку.', 100001); static::$inited = TRUE; } catch (Exception $e) { echo "\nТехническое сообщение:\n Ошибка №" . $e->getCode() . ". " . $e->getMessage(); //1045 - не вошел в бд. exit(); } SLT::SectionEnd(); } return true; } А именно: Код (PHP): static::$connect->query("SET NAMES '" . static::$settings['codepage'] . "'"); ThrowOnFalse(static::$connect->set_charset(static::$settings['codepage']), 'Не могу установить требуемую кодировку.', 100001);
начни с того, чтобы работать с mysqli http://php.ru/manual/mysqli.construct.html с объектом с такими вот стрелочками: Код (PHP): $mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db'); /* * This is the "official" OO way to do it, * BUT $connect_error was broken until PHP 5.2.9 and 5.3.0. */ if ($mysqli->connect_error) { die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error); }
В .htaccess: php_value default_charset utf-8 или в верху php файла (head.php или config.php) Код (PHP): header('content-type:text/html;charset=utf-8'); второй вариант через пхп файл имеет преимущества перед кодировками в .htaccess и <meta> А что с БД не знаю...