base_convert($id, 10, 36);
我使用 36 中 MySQL 表的转换 ID 作为唯一的短 URL。用户可以在这样的 URL 中看到一些令人讨厌的词吗?
UPDATE
看来我已经弄明白了,号码是739172。嗯,那里有脏话。
base_convert($id, 10, 36);
我使用 36 中 MySQL 表的转换 ID 作为唯一的短 URL。用户可以在这样的 URL 中看到一些令人讨厌的词吗?
UPDATE
看来我已经弄明白了,号码是739172。嗯,那里有脏话。
使用 36 进制数字系统,您可以写出英语中的任何单词,包括。和淫秽。是的,数字将保持不变!
例如,
当然还有更像样的数字,举个例子,
这样,甚至可以对整个短语进行编码。对于转换,如果第二个和第三个参数互换,您可以使用PHP 中的base_convert函数,如问题所示。
据我了解,最终目标不是找出36进制数字系统中是否有脏话,而是根据数据库中的标识符编号生成不包含此类单词的ID。
有一个生成此类 ID 的库 - hashids - 并且它具有针对脏话的内置保护:
Defense针对的是英文单词,但是思路很简单,不用编词典也可以轻松扩展。
使用库的示例:
使用从字符串表示形式到 int 的逆向转换函数,您可以轻松地在任何数字系统中找到任何结果词。例如在 javascript 中,这是 parseInt 函数:
您无需离开收银机即可在控制台(ctrl + shift + i)中查看。
接下来,我们简单地拿一个淫秽词汇的字典,对于每个单词我们得到一个数字——我们将它用作哈希数组中的键(最好使用 Set(集合),如果语言允许的话——它更经济,因为它只包含键而没有值 \u200b\u200b 与之匹配)。现在您可以轻松检查号码是否淫秽。您可以直截了当地做到这一点,但是使用带有关键字的集合(“坏”词的字典)在内存方面比使用带有关键字数字的集合更昂贵。