igroman1266
:)
- Сообщения
- 363
- Реакции
- 216
Лично у меня на серверах не работает новая версия плагина (Сервера cs:go). Ничего просто не изменяет людям. Сам какие либо символы пытался делать в нике, всё равно ничего не меняется
Как я и писал выше это заменяющий символ. Он весит 1 байт и фильтроваться не будет.Игра ксс, зашел чел с тремя вопросительными знаками вместо ника, плагин никак не отреагировал. Модуль client в смаке отключен и поэтому его пустило. Версия последняя. Странно крч. Кстати материал админс его отказался банить (был еще и с вх) и занёс в бекап, мол подключения нет. Хотя меню же есть и игроков последних вышедших он показывает. Значит подключение есть. Ну может это и не связано с ником, не знаю.
Плагин очищает пользовательские никнеймы от сторонних символов, которые как-либо могут сломать запрос для СУБД аля MySQL
stock SafeSql(String:s[])
{
new length = TrimString(s);
if (length < 1) { return; }
for (new i = 0, c, b, b_count; i < length;)
{
if ((b_count = GetCharBytes(s[i])) < 1) {
b_count = 1;
}
for (b = 0; b < b_count; b++)
{
c = s[i + b];
if
( c < 32/*space*/ /*возможно здесь есть что-то нужное, новая строка и тд*/
|| c == 34/*"*/
|| c == 37/*%*/
|| c == 38/*&*/
|| c == 39/*'*/
|| c == 92/*\*/
|| c == 96/*`*/
)
{
for (b = 0; b < b_count; b++) { s[i + b] = 46/*'.'*/; }
break;
}
}
i += b_count;
}
}
Подскажи пожалуйста куда вставлять код.Просто удаляя все символы, которые весят > 2 байт?) По идее можно найти что-то более логичное, есть же немало безопасных символов. И если ник опасен для sql запроса, то как-бы сразу менять ему ник - какой смысл - пусть играет с каким хочет, а перед запросом его в переменной подправим. Это если там маты и реклама и тд, что реально запрещено, тогда уже наверно есть смысл менять.
Я затестил немного такую строку для примера:
new String:s[] = "✔F\\б'`\"&▲#%";
Твоя функция в итоге оставляет это:
F\б'`"&#%
Т.е. тут опасных символов нет да?)
Знак процента, который наверно Format может сломать, обратный слеш, кавычки и тд)
Что если по такой логике пойти: Мы узнали из скольки байт состоит символ, теперь циклом проходимся по его байтам ну и проверяем этот каждый байт на запрещенный. Если встретили запрещенный, то или вырезаем символ, как ты сделал, или что более легче (как мне кажец), заменить каждый байт плохого символа точкой. У меня вот в итоге осталось:
✔F.б....▲#.
C++:stock SafeSql(String:s[]) { new length = TrimString(s); if (length < 1) { return; } for (new i = 0, c, b, b_count; i < length;) { if ((b_count = GetCharBytes(s[i])) < 1) { b_count = 1; } for (b = 0; b < b_count; b++) { c = s[i + b]; if ( c < 32/*space*/ /*возможно здесь есть что-то нужное, новая строка и тд*/ || c == 34/*"*/ || c == 37/*%*/ || c == 38/*&*/ || c == 39/*'*/ || c == 92/*\*/ || c == 96/*`*/ ) { for (b = 0; b < b_count; b++) { s[i + b] = 46/*'.'*/; } break; } } i += b_count; } }
Он его сломает только если разработчик явно пропишет никнейм в строке формата, что исключается, ибо у всех будет статичный никнейм.Знак процента, который наверно Format может сломать
обратный слеш, кавычки
Database.Escape()
с этим справится уже без проблем. Изначальная цель этого плагина - убрать потенциальные проблемы, связанные с двумя различными кодировками для MySQL: utf8
и utf8mb4
.Просто поставь новый lr, там в кфг есть параметр utf8mb4 и пересоздай базуОно спасает от этого?
[levelsranks.smx] [Levels Ranks Core] SaveDataPlayer - Incorrect string value: '\xD0' for column 'name' at row 1
у меня ксс в34 сервер и см 1.9. Не получится поставить последнюю версиюПросто поставь новый lr, там в кфг есть параметр utf8mb4 и пересоздай базу
Тогда дау меня ксс в34 сервер и см 1.9. Не получится поставить последнюю версию
Данный плагин как бы я не мучал жопу,не помогает исправить эти ошибки.Ещё раз. Поддержки со стороны плагина и сервера БД - недостаточно. Вменяемой поддержки всё ещё нет со стороны самого SourceMod.
L 01/28/2020 - 14:26:02: [levelsranks.smx] SQL_Callback Error (674): Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1
L 01/28/2020 - 14:26:28: [shop.smx] PlayerManager_AuthorizeClient: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1
\x
всегда. И этот плагин нацелен именно на такие ситуации, когда у пользователя в нике есть символы, занимающие три и более "символа".Он не сможет исправить; символ битый, обрезанный.[Levels Ranks Core] SaveDataPlayer - Incorrect string value: '\xD0' for column 'name' at row 1
Ответ тут Client Name FixerПроисходит что-то очень странное. Плагин не меняет ники, хотя запущен и ошибок не выдает.
Кодировка в таблице InnoDB - utf8mb4_unicode_ci
Ошибок в логах меньше не стало - [CHAT LOG] Query Failed: Incorrect string value: '\xF0\x9D\x90\xA7\xF0\x9D...' for column 'name' at row 1
Думаю нет, т.к в описании написано, что он очищает ник от этих сторонних символов и т.к весь ник состоит из этих символов, то получается он получит ник unnamed.Разве такого рода ники не должны фикситься?
"。.✿𝓑𝔂𝓪𝓴𝓪✿.
Думаю нет, т.к в описании написано, что он очищает ник от этих сторонних символов и т.к весь ник состоит из этих символов, то получается он получит ник unnamed.