清理Unicode输入的最佳实践

清理Unicode输入的最佳实践,unicode,user-input,Unicode,User Input,我现在正在开发一个web应用程序(使用Ruby),我最终希望它能被世界上任何地方的人使用。考虑到这一点,对非ASCII字符的支持至关重要。但是,我不希望数据库在诸如用户名等字段中充满“噪音”字符 在这些情况下,在不疏远用户的情况下处理Unicode输入是否有公认的最佳实践?有没有想过如何处理用户名中的同形异义词,从而使模拟更困难 到目前为止,我的一些想法- 在查询中存储或使用文本之前规范化文本 过滤不可打印字符 限制输入中允许的顺序组合变音符号的数量 还有什么想法吗,还是我在为自己做不必要的

我现在正在开发一个web应用程序(使用Ruby),我最终希望它能被世界上任何地方的人使用。考虑到这一点,对非ASCII字符的支持至关重要。但是,我不希望数据库在诸如用户名等字段中充满“噪音”字符

在这些情况下,在不疏远用户的情况下处理Unicode输入是否有公认的最佳实践?有没有想过如何处理用户名中的同形异义词,从而使模拟更困难

到目前为止,我的一些想法-

  • 在查询中存储或使用文本之前规范化文本
  • 过滤不可打印字符
  • 限制输入中允许的顺序组合变音符号的数量
还有什么想法吗,还是我在为自己做不必要的工作


谢谢。

将告诉您应该做什么,也就是说,担心规范化和安全问题。

老实说,我认为您不仅在为自己做更多的工作,而且在破坏您既定的目标。如果你想让你的应用程序支持国际使用,它应该接受国际用户名、密码和你拥有的东西。数据库发生了比在字段中使用阿拉伯语字符更糟糕的事情。目标是让人们能够使用阿拉伯语/日语/韩语/德瓦纳加里/克林贡语/whathaveyou用户名进行注册,但如果可能的话,尽量减少来自同形词模拟等方面的风险。谢谢。LibIDN提供了RFC3454的实现,这就是我应该使用的,我的理解正确吗?