【发布时间】:2015-05-07 14:59:48
【问题描述】:
我们遇到了一个疯狂的错误,即在保存电子邮件时,大约 90% 的时间似乎是随机字节被附加到电子邮件字段中。以下是可能发生的示例:
来自参数:'user@example.com' 验证前:'user@example.com' 验证后:'user@example.com' 保存前:'user@example.com' 保存后对象中的值:'user@example.com' 获取id刚刚创建的记录,获取id: 'user@example.com\u007f'\u007f(UTF-8 delete character!!!)到底是从哪里来的?!这是迄今为止出现的最常见的垃圾。下面列出了一些其他不时出现的有效字节序列:
有时我得到完全垃圾位,由于PG::CharacterNotInRepertoire 错误,我无法判断是否有比这些更多的字节:
0xde 0x4d
0xf6 0x7f
0xbc
0xe3 0x6c 0x24
鉴于发生的 PG::CharacterNotInRepertoire 错误,我假设这发生在值被保存之前的某个地方,但超出了我的应用程序代码的范围。
请注意,奇怪的是,用户的任何其他字段都不会发生这种情况。
以下是当前涉及电子邮件地址的所有回调:
-
#strip!和#downcase!验证前 - 使用正则表达式
\A[A-Za-z0-9._%+-]+@(?:[A-Za-z0-9-]+\.)+[A-Za-z]{2,20}\z进行格式验证
一些应用信息:
- Ruby v2.2.0
- Rails v4.1.8
- Postgres v9.3.2
- PG v0.17.1
【问题讨论】:
标签: ruby-on-rails ruby postgresql utf-8