Вместо русских данных я вижу данные на английском

У меня есть русский сайт и вместо русских данных я вижу данные на английском.

   <?php
$dbc_utf8 = mysqli_connect ("mysite.com", "xxxxxxxxxxx", "xxxxxxxxxxx", "xxxxxxxxxxx");
mysqli_query($dbc_utf8, 'SET CHARACTER utf8');
mysqli_query($dbc_utf8, 'SET NAMES utf8');
/*  Installing Russian locale Connection */
mysqli_query($dbc_utf8, "SET lc_time_names = 'ru_RU'") ;
?>

У меня есть база данных, где мне нужно поле «date_add» на русском языке. На экране я вижу «23 февраля 2014»

CREATE TABLE `comment_common` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parent_id` int(5) NOT NULL,
`id_post` int(5) NOT NULL,
`id_shop` int(5) NOT NULL,
`name` varchar(200) CHARACTER SET utf8 NOT NULL,
`comment` text CHARACTER SET utf8 NOT NULL,
`date_add` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=11568 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=11568 ;

В базе данных

$sql = "SELECT id, parent_id, name, comment,
DATE_FORMAT(date_add, '%d %M %Y') as date_add
FROM comment_common
";

0

Решение

Получите время из базы данных и поместите его в переменную. Тогда попробуйте этот код:

Если вы используете Linux на сервере, используйте:

setlocale(LC_ALL, 'ru_RU.UTF-8');
echo strftime(); //PS down

вы можете узнать, как использовать эту функцию из Вот

Если вы используете Windows:

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
setlocale(LC_ALL, 'russian');
0

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

Вы должны выполнить эти запросы, поместив их в один запуск SQL

$sql = "SET lc_time_names = 'ru_RU';
SELECT id, parent_id, name, comment,
DATE_FORMAT(date_add, '%d %M %Y') as date_add
FROM comment_common;";

Если я запустил его таким образом в phpMyAdmin, я отобразил его на правильном языке: 14 Сентября 2014 но когда я впервые запускаю первый запрос, а затем второй запрос, у меня также были данные на английском языке.

Чтобы получить желаемый результат, вы должны использовать mysqli_store_result() функция, поэтому правильный код для этого будет:

<?php

header('Content-Type: text/html; charset=utf-8');
$dbc_utf8 = mysqli_connect ("localhost", "root", "", "tests");
mysqli_query($dbc_utf8, 'SET CHARACTER utf8');
mysqli_query($dbc_utf8, 'SET NAMES utf8');
/*  Installing Russian locale Connection */
$sql = "SET lc_time_names = 'ru_RU';
SELECT id, parent_id, name, comment,
DATE_FORMAT(date_add, '%d %M %Y') as date_add
FROM comment_common
";

if (mysqli_multi_query($dbc_utf8, $sql)) {
do {
/* store first result set */
if ($result = mysqli_store_result($dbc_utf8)) {
while ($row = mysqli_fetch_assoc($result)) {
echo $row['date_add'];
}
mysqli_free_result($result);
}

} while (mysqli_more_results($dbc_utf8) && mysqli_next_result($dbc_utf8));
}
?>

Однако это не очень удобно. Кажется, что вместо SET lc_time_names = 'ru_RU' ты должен использовать SET GLOBAL lc_time_names = 'ru_RU' чтобы он работал в обычном коде, поэтому лучшим вариантом должно быть:

<?php

header('Content-Type: text/html; charset=utf-8');
$dbc_utf8 = mysqli_connect ("localhost", "root", "", "tests");
mysqli_query($dbc_utf8, 'SET CHARACTER utf8');
mysqli_query($dbc_utf8, 'SET NAMES utf8');
/*  Installing Russian locale Connection */
mysqli_query($dbc_utf8, "SET GLOBAL lc_time_names = 'ru_RU'") ;

$sql = "SELECT id, parent_id, name, comment,
DATE_FORMAT(date_add, '%d %M %Y') as date_add
FROM comment_common
";

$result = mysqli_query($dbc_utf8, $sql);

$row = mysqli_fetch_assoc($result);

echo $row['date_add'];?>

Однако в этом случае вам нужны права администратора, и я не знаю почему, но этот код не работает при первом запуске, со 2-го числа он возвращает дату на русском языке.

0