У меня есть русский сайт и вместо русских данных я вижу данные на английском.
<?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
";
Получите время из базы данных и поместите его в переменную. Тогда попробуйте этот код:
Если вы используете 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');
Вы должны выполнить эти запросы, поместив их в один запуск 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-го числа он возвращает дату на русском языке.