0

最近我注意到一个用户名在我的 Web 服务上被阻止,因为它与我放置在那里的用于将字符限制为字母、数字和某些符号的正则表达式过滤器不匹配。字符串是 Dong,事实证明,在我的游戏中,用户必须将 Unicode 字符串粘贴到文本输入字段中,这是我之前没有考虑过的。

我做了一些研究并注意到 C# Regex 是 Unicode 感知的,我可以添加 \p{L}\p{M}\p{Z}\p{N} 以允许更多组合,但我仍然不会不确定我允许或不允许所有适当的组合。特别是我希望能够阻止使用某些可能会冒犯年轻玩家(或老玩家)的词。现在我有一个坏词过滤器,我在用户完成输入后应用它,它可以很好地阻止大多数尝试制作令人反感的用户名,但只有(我现在意识到)如果他们使用 ASCII 来编写它。

考虑到某些 Unicode 字符没有以游戏选择的特定字体表示,并且某些 Unicode 组合实际上会弄乱您的显示对齐,其他游戏如何处理这个问题?

4

1 回答 1

1

质量更高的游戏/应用程序对其主要字体不支持的字符使用后备字体 - 如果 Segoe UI 没有该字符,则使用 Arial Unicode 后备。这通常工作得很好,因为它只是非英文字符、表情符号等最终使用备用字体呈现。

如果您不这样做,则必须将用户输入限制为您选择的字体将支持的内容,如果不是一直回到 ASCII 的话。

不过,与限制“坏词”相比,支持字体的问题是完全不同的。有一个标记机制是个好主意,但使用一个常见的“淘气词”列表也很有帮助。即使您不会说每种语言,您也可以在网络上的某个地方找到这些语言的单词列表。

于 2016-02-09T00:46:01.777 回答