gpt4 book ai didi

mysql - 如何从 Rails 4 中的用户输入中去除不可打印的 unicode 字符?

转载 作者:行者123 更新时间:2023-11-29 23:49:16 24 4
gpt4 key购买 nike

我在用户复制和粘贴输入时遇到问题,这会导致不可打印的字符阻止 MySQL 保存记录。错误如下:

Mysql2::Error: Incorrect string value: '\xE2\x80\x8B\xE2\x80\x8B...' for column 'address' at row 1

我发现类似问题的现有答案并不令人满意,因为它们似乎都要求我更改数据库以接受这些 un​​icode 字符。但我不想拯救这些角色!我宁愿将它们去掉并保留有效的 ASCII 字符。

最好/首选的方法是什么?到目前为止,我遇到了以下方法:

"offending string".encode(Encoding.find('ASCII'), {invalid: :replace, undef: :replace, replace: "", universal_newline: true})

这似乎在大多数情况下都有效,除了为了补偿零字段之外,我必须在每个字段上使用三元表达式。严重的代码味道!

然后是这样的:

.gsub(/(\W|\d)/, "")

这实现了我想要的部分功能,但它也删除了引号等字符。

我更喜欢可以更改的设置,而不是对参数进行方法调用。

最佳答案

我认为您使用 gsub 命令的方向是正确的。

您永远不想在不清理数据库的情况下将用户输入直接放入数据库中。这可能会导致严重的安全风险(只是 Google“SQL 注入(inject)”)。

请查看以下链接: http://apidock.com/ruby/String/gsub http://www.oreillynet.com/pub/a/ruby/excerpts/ruby-learning-rails/ruby-guide-regular-expressions.html

这些将让您构建一个正则表达式作为 gsub 命令的第一个参数,并且您可以将第二个参数保留为空字符串以删除它们。您说您不想使用您发布的 gsub 命令,因为它还会删除引号和您想保留的其他字符...

尝试如下:

 "offending string".gsub(/(\W|\d|^(\"|\.))/, "")

这应该允许您抓取所有字符

  1. 不是单词字符
  2. 数字
  3. 不引用字符和
  4. 不是点字符

并将它们替换为空字符串 (""),这会有效地删除它们。

(请检查正则表达式,如果它没有达到您想要的效果,请查阅我发布的链接并构建和迭代,直到获得一个有效的链接。)

从那里你可以做一些事情,比如通知用户他们应该重新输入他们的输入,或者告诉他们你不会接受数字或特殊字符或其他......

希望这有帮助。

关于mysql - 如何从 Rails 4 中的用户输入中去除不可打印的 unicode 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25731033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com