base_convert($id, 10, 36);
Использую преобразованный ID из таблицы MySQL в 36-ричной системе счисления в качеств
уникального короткого URL. Может ли пользователь увидеть какое-то неприятное слово в таком URL?
UPDATE
Кажется уже разобрался, число 739172. Мда, есть там матерные слова.
Ответы
Ответ 1
Насколько я понял, итоговая цель не узнать, есть ли матерные слова в 36-ричной систем
счисления, а сгенерировать ID, таких слов не содержащие, на базе числа-идентификатора из БД.
Есть библиотека, которая занимается генерацией таких ID - hashids - и у нее ест
встроенная защита от бранных слов:
This code was written with the intent of placing created ids in
visible places, like the URL. Therefore, the algorithm tries to avoid
generating most common English curse words by generating ids that
never have the following letters next to each other: c, f, h, i, s, t, u
Защита нацелена на английские слова, но идея настолько проста, что ее легко расширить без составления словарей.
Пример использования библиотеки:
$hashids = new Hashids('my secret key');
$id = $hashids->encode(1, 2, 3); // o2fXhV
$numbers = $hashids->decode($id); // [1, 2, 3]
Ответ 2
36-ричной системой счисления можно записать любое слово из английского языка, в т.ч. и нецензурные. Да ещё и на цифры останется!
Например,
число 73917210 записывается как FUCK36,
число 59142810 записывается как COCK36,
число 4342741010 равно PUSSY36.
Разумеется, существуют и более приличные числа, как пример,
349843988510 = 1luvPHP36 (I love PHP).
Таким образом можно закодировать даже целые фразы. А для преобразования можно воспользоваться функцией base_convert из PHP, как в вопросе, если второй и третий параметры поменять местами.
Ответ 3
Можно легко найти любое получаемое слово в любой системе счисления используя функци
обратного преобразования из строкового представления в int. Например в javascript это функция parseInt:
parseInt("bad", 36)
parseInt("good", 36)
parseInt("fuck", 36)
parseInt("cock", 36)
parseInt("pussy", 36)
Можно проверить в консоли (ctrl+shift+i) не отходя от кассы.
Далее просто берем словарь обсценной лексики, для каждого слова получаем число
используем его как ключ в хеш-массиве (лучше использовать Set (множество), если позволяе
язык — он экономнее, так-как содержит только ключи без сопоставленных им значений). Теперь можно легко проверить является ли число — матерным. Можно делать и в лоб, но использование в работе Set с ключами-словами (словаря «плохих» слов), выйдет дороже по памяти, нежели использование Set c ключами-числами.
Комментариев нет:
Отправить комментарий