Всем привет!
Столкнулся с проблемой русских ников в RankMe при использовании MySQL: при добавлении игрока с русским ником в базу, он сохранялся с кракозябрами кодировки. (пример: ÐиТащер228 )
Но это пол беды - при запросе (через php, к примеру) данных о игроке они так же криво отображались на html-странице, при любых charset'ах, при любых кодировках самого html-файла.
Решение искалось не долго - на странице habra обнаружил интересную тему: Особенности работы с кодировками в MySQL 4.1+
После обновления 4.1 в mysql первым делом нужно указывать в какой кодировке будем отправлять/получать данные:
А так же, не менее важное: при создании таблицы необходимо в конце запроса ставить такие параметры, чтобы установить в какой кодировке она будет:
Скачав с оф.форума исходник, я поправил запросы SQL в них в соответствии с новыми введениями в более поздних версиях mysql, и все встало на свои места.
Ставите плагин, запускаете сервак, если данные для подключения верны - должна создаться таблица в указанной БД на сервере. Кстати, таблица(у неё кодировка latin1) со всеми рангами храниться у меня в базе данных ranks(у неё кодировка utf8_general_ci, поэтому можете не заморачиваться с кодировкой самой БД, только проверьте кодировку таблицы в ней.)
Для проверки кодировки новой таблицы можете отправить ей запрос вида:
В ответе должны получить несколько строк, где важна только эта:
Если все так, то таблица создана правильно и проблем возникнуть не должно. Сами редакторы (к примеру HediSQL) могут коряво отображать русские буквы: не волнуйтесь, так и есть, по умолчанию у него стоит utf8, а не latin1, можете выполнить запрос вида SET NAMES 'latin1'; SELECT * FROM <имя_таблицы>; - это покажет вам вашу таблицу с русскими и английскими буквами. Нам это не особо важно, ведь мы будем получать данные через сайт.
Вот краткие примеры, по которым у меня все работает как часы (сразу оговорюсь - все файлы сайта в кодировке UTF-8 без BOM)
Подключаемся к базе, используя кодировку latin1 (aka windows-1252)
Ну и, собственно, получаем из базы то, что хотим:
Ну и отображаем на нашей странице полученные данные, тут важно установить meta тег с параметром charset равным utf-8:
P.S. Вы спокойно можете настроить так, чтобы все работало в utf-8 и через utf-8 - это будет даже вернее. Но суть этого исправления в том, чтобы была возможность пользоваться RankMe "из коробки", не настраивая ничего в базах/кодировках.
Все просто: скачали, поставили, запустили - радуетесь.
Спасибо за внимание, скомпилированный плагин прикручу к заметке.
SourceMod Version: 1.6.3
Metamod:Source version 1.10.4
Тестировалось на CS:GO.
UPD: Исходник не загружается, т.к hlmod установил ограничение в 32Кб, исходник - 86Кб.
UPD2: last_player.zip - это для проверки работоспособности плагина. Заливаете на сайт и заходите на index.php в корневую директорию; он отобразит ник последнего игрока. Так же не забудьте в файле src/db.php поправить данные подключения к БД.
Если все сделано правильно, то увидите нормальные буквы(в том числе и русские).
Я проверил - русский текст пишет нормально.
Столкнулся с проблемой русских ников в RankMe при использовании MySQL: при добавлении игрока с русским ником в базу, он сохранялся с кракозябрами кодировки. (пример: ÐиТащер228 )
Но это пол беды - при запросе (через php, к примеру) данных о игроке они так же криво отображались на html-странице, при любых charset'ах, при любых кодировках самого html-файла.
Решение искалось не долго - на странице habra обнаружил интересную тему: Особенности работы с кодировками в MySQL 4.1+
После обновления 4.1 в mysql первым делом нужно указывать в какой кодировке будем отправлять/получать данные:
PHP:
mysql_query("SET NAMES '<сокр_имя_кодировки>'"); //к примеру cp1251
//А дальше выполняйте любые запросы, кодировка сохранится, пока вы не закроете текущее соединение с БД.
А так же, не менее важное: при создании таблицы необходимо в конце запроса ставить такие параметры, чтобы установить в какой кодировке она будет:
PHP:
DEFAULT CHARACTER SET <сокр_имя_кодировки> COLLATE <полное_имя_кодировки>; //по умолчанию в utf8
Скачав с оф.форума исходник, я поправил запросы SQL в них в соответствии с новыми введениями в более поздних версиях mysql, и все встало на свои места.
Ставите плагин, запускаете сервак, если данные для подключения верны - должна создаться таблица в указанной БД на сервере. Кстати, таблица(у неё кодировка latin1) со всеми рангами храниться у меня в базе данных ranks(у неё кодировка utf8_general_ci, поэтому можете не заморачиваться с кодировкой самой БД, только проверьте кодировку таблицы в ней.)
Для проверки кодировки новой таблицы можете отправить ей запрос вида:
PHP:
SHOW VARIABLES LIKE 'character_set%';
PHP:
... //Остальные utf8
character_set_filesystem binary
character_set_server latin1 //Она важна!
...
Вот краткие примеры, по которым у меня все работает как часы (сразу оговорюсь - все файлы сайта в кодировке UTF-8 без BOM)
Подключаемся к базе, используя кодировку latin1 (aka windows-1252)
PHP:
<?php
//это db.php
$msql = array(
"ip" => '127.0.0.1',
"u" => 'user', //имя юзера
"p" => 'pass', //пароль
"db" => 'basename' //имя БД, где будет таблица rankme
);
$link = mysql_connect($msql['ip'], $msql['u'], $msql['p']) or die(); //Подключаемся к серверу mySQL
mysql_select_db($msql['db']) or die();
mysql_query("SET NAMES 'latin1'"); //один из ключевых моментов!
//mysql_set_charset("");
?>
Ну и, собственно, получаем из базы то, что хотим:
PHP:
//это file.php
include('db.php');
$lastu="select name from rankme order by id desc limit 1";
$result = mysql_query($lastu);
$i=mysql_fetch_array($result);
$last=$i['name'];
mysql_free_result($result);
echo $last; //получаем ник последнего игрока
Ну и отображаем на нашей странице полученные данные, тут важно установить meta тег с параметром charset равным utf-8:
HTML:
<?php include('file.php'); ?>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<?php echo $last; //Тут будет ник последнего игрока. ?>
</body>
</html>
P.S. Вы спокойно можете настроить так, чтобы все работало в utf-8 и через utf-8 - это будет даже вернее. Но суть этого исправления в том, чтобы была возможность пользоваться RankMe "из коробки", не настраивая ничего в базах/кодировках.
Все просто: скачали, поставили, запустили - радуетесь.
Спасибо за внимание, скомпилированный плагин прикручу к заметке.
SourceMod Version: 1.6.3
Metamod:Source version 1.10.4
Тестировалось на CS:GO.
UPD: Исходник не загружается, т.к hlmod установил ограничение в 32Кб, исходник - 86Кб.
UPD2: last_player.zip - это для проверки работоспособности плагина. Заливаете на сайт и заходите на index.php в корневую директорию; он отобразит ник последнего игрока. Так же не забудьте в файле src/db.php поправить данные подключения к БД.
Если все сделано правильно, то увидите нормальные буквы(в том числе и русские).
Я проверил - русский текст пишет нормально.
Вложения
Последнее редактирование: