Any game Допиленный RankMe 2.8.3 для MySQL

SiBear

Участник
Сообщения
6
Реакции
2
Всем привет!

Столкнулся с проблемой русских ников в 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 //Она важна!
...
Если все так, то таблица создана правильно и проблем возникнуть не должно. Сами редакторы (к примеру HediSQL) могут коряво отображать русские буквы: не волнуйтесь, так и есть, по умолчанию у него стоит utf8, а не latin1, можете выполнить запрос вида SET NAMES 'latin1'; SELECT * FROM <имя_таблицы>; - это покажет вам вашу таблицу с русскими и английскими буквами. Нам это не особо важно, ведь мы будем получать данные через сайт.

Вот краткие примеры, по которым у меня все работает как часы (сразу оговорюсь - все файлы сайта в кодировке 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 поправить данные подключения к БД.
Если все сделано правильно, то увидите нормальные буквы(в том числе и русские).
Я проверил - русский текст пишет нормально.
 

Вложения

  • rankme.smx
    59.3 КБ · Просмотры: 71
  • last_player.zip
    1.6 КБ · Просмотры: 94
Последнее редактирование:

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
Если проблема отображения ников на сайте, то с установкой этого плагина, будет всё норм?
 

SiBear

Участник
Сообщения
6
Реакции
2
Пробуйте, если что-то не работает или будут вопросы - я отвечу.
P.S. Исходник затерялся, чуть позже прилеплю.
 
Сообщения
2,587
Реакции
1,343
Саша Шеин, Какая версия PHP стоит? У меня например - если ставлю выше 5.2 ломается текст.
 

SiBear

Участник
Сообщения
6
Реакции
2
PHP 5.3.3-7+squeeze19 with Suhosin-Patch (cli) (built: Feb 17 2014 10:10:23)
Server version: Apache/2.2.16 (Debian)

НО, от этого зависеть не должно.
Пробуйте эту версию плагина, если заработает/не заработает - пишите сюда, будем решать.
Но это мне помогло с русскими буквами(никами).

P.S. Прошу отписаться в этой теме всем тем, кто попробовал этот плагин.
Это мне поможет понять че подправить в теме, чтобы всем было ясно.

UPD: Проверил, все должно быть нормально. Проверяйте.
 
Последнее редактирование:

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
SiBear, если я правильно понял. То при установке плагина надо обнулить стату и тогда тестить. А как быть с сайтом(web частью) тем у кого нет доступа к web-части кроме как через браузер.
 

TWRP

Участник
Сообщения
317
Реакции
44
Вот костыль есть от Легенды с хоста serva4ok
Когда сидел когда-то на майарене то были такие траблы с текстом ника.

Поставив его все пропало.
http://forum.serva4ok.ru/index.php?/topic/19026-rankme-иероглифы-в-web/

но там нет скачки с постов, может кому-то интересно, напишите ему он даст или butaford он тоже даст костыль
 

SiBear

Участник
Сообщения
6
Реакции
2
SiBear, если я правильно понял. То при установке плагина надо обнулить стату и тогда тестить. А как быть с сайтом(web частью) тем у кого нет доступа к web-части кроме как через браузер.
У вас должен быть доступ к MySQL и Web.
В MySQL вы должны будете проверить вашу таблицу(просто проверить в какой кодировке сохранилась таблица), а на сайте проверить meta-тег charset=utf-8
Если это готовая панель, то придется вам править .php скрипты, т.к. необходимо перед всеми запросами в базу отправить этот: SET NAMES 'latin1';
 

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
SiBear, печально у меня нет доступа ни к Web морде ни к MySql.
 

SiBear

Участник
Сообщения
6
Реакции
2
Так где исходник?
Обновил шапку:
HLmod не загружает, т.к исходник(86Кб) весит в 2 раза больше квоты(32Кб).

Добавлено через 4 минуты
SiBear, печально у меня нет доступа ни к Web морде ни к MySql.
К mysql можно и не иметь, а вот к морде нужно, т.к туда нужно вставить ту строчку в скрипт.
 
Последнее редактирование:

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #15
PHP:
public TestF(String:callback[]){    decl String:query1[1024];    FormatEx(query1, 1024, "SET NAMES \"UTF8\"");    SQL_TQuery(g_hStatsDb, SQL_PurgeCallback, query1);
}
Бред.

Достаточно писать перед каждым запросом
PHP:
SQL_FastQuery(g_hStatsDb, "SET NAMES \"UTF8\"");

P.S. не проверял
 
Сверху Снизу