最近我注意到我的网络服务上阻止了用户名,因为它与我在那里放置的正则表达式过滤器不匹配,将字符限制为字母,数字和某些符号。字符串是Dong,事实证明,在我的游戏中,用户必须将Unicode字符串粘贴到文本输入字段中,这是我在那一点上没有考虑过的。
我做了一些研究并注意到C#Regex具有Unicode感知功能,我可以添加\ p {L} \ p {M} \ p {Z} \ p {N}以便允许更多组合,但我我仍然不确定我是否允许或禁止所有适当的组合。特别是我希望能够阻止使用可能冒犯年轻球员(或者更老的球员)的某些词语。现在我有一个错误的单词过滤器,我在用户完成输入后应用,这很好地阻止了大多数尝试使用令人反感的用户名,但只有(我现在意识到)他们是否使用ASCII来编写它。
其他游戏如何解决这个问题,因为某些Unicode字符没有以为游戏选择的特定字体表示,并且某些Unicode组合实际上可能会破坏显示中的对齐方式?
答案 0 :(得分:1)
更高质量的游戏/应用使用后备字体来支持其主要字体不支持的字符 - 如果Segoe UI没有该字符,则会回退Arial Unicode。这通常可以正常工作,因为它只是非英文字符,表情符号,以及使用备用字体最终呈现的东西。
如果你不这样做,你必须限制用户输入你选择的字体将支持的内容,如果不是一直回到ASCII。
支持字体的问题与限制"坏词"相比但是完全是分开的。有一个标记机制是一个好主意,但也使用一个常见的"顽皮的单词"也有帮助。即使你不会说每种语言,你也可以在网上找到这些语言的单词列表。