Mysql 如何从Rails 4中的用户输入中剥离不可打印的unicode字符?
我在用户复制和粘贴输入时遇到问题,这会导致不可打印的字符阻止MySQL保存记录。以下是错误:Mysql 如何从Rails 4中的用户输入中剥离不可打印的unicode字符?,mysql,ruby-on-rails,unicode,strip,non-ascii-characters,Mysql,Ruby On Rails,Unicode,Strip,Non Ascii Characters,我在用户复制和粘贴输入时遇到问题,这会导致不可打印的字符阻止MySQL保存记录。以下是错误: Mysql2::Error: Incorrect string value: '\xE2\x80\x8B\xE2\x80\x8B...' for column 'address' at row 1 我觉得类似问题的现有答案并不令人满意,因为它们似乎都要求我更改数据库以接受这些unicode字符。但我不想保存这些角色!我宁愿去掉它们并保留有效的ASCII字符 这样做的最佳/首选方式是什么?到目前为止,我
Mysql2::Error: Incorrect string value: '\xE2\x80\x8B\xE2\x80\x8B...' for column 'address' at row 1
我觉得类似问题的现有答案并不令人满意,因为它们似乎都要求我更改数据库以接受这些unicode字符。但我不想保存这些角色!我宁愿去掉它们并保留有效的ASCII字符
这样做的最佳/首选方式是什么?到目前为止,我遇到了以下方法:
"offending string".encode(Encoding.find('ASCII'), {invalid: :replace, undef: :replace, replace: "", universal_newline: true})
这似乎在大多数情况下都有效,除了补偿零字段,我必须在每个字段上使用三元表达式。严重的代码气味
然后是这个:
.gsub(/(\W|\d)/, "")
这是我想要的一部分,但它也删除了引号之类的字符
我更喜欢可以更改的设置,而不是将方法调用附加到我的参数上。我认为使用gsub命令是正确的 您永远不希望在不清理数据库的情况下将用户输入直接放入数据库。 这可能会导致严重的安全风险,仅仅是谷歌SQL注入 请查看以下链接: 这将允许您构建一个正则表达式作为gsub命令的第一个参数,并且您可以将第二个参数保留为空字符串以去除它们。 您说过您不想使用您发布的gsub命令,因为它还会删除引号和其他您想要保留的字符 尝试以下方法:
"offending string".gsub(/(\W|\d|^(\"|\.))/, "")
这应该允许您抓取所有
非文字字符
数字
不引用字符和
非点字符
并用空字符串替换它们,从而有效地剥离它们
请检查正则表达式,如果它不符合您的要求,请参考我发布的链接,构建并迭代,直到您得到一个有效的正则表达式
从那里你可以做一些事情,比如告诉用户他们应该重新输入,或者告诉他们你不接受数字、特殊字符或其他任何东西
希望这有帮助