Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何从Rails 4中的用户输入中剥离不可打印的unicode字符?_Mysql_Ruby On Rails_Unicode_Strip_Non Ascii Characters - Fatal编程技术网

Mysql 如何从Rails 4中的用户输入中剥离不可打印的unicode字符?

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字符 这样做的最佳/首选方式是什么?到目前为止,我

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

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|^(\"|\.))/, "")
这应该允许您抓取所有

非文字字符 数字 不引用字符和 非点字符 并用空字符串替换它们,从而有效地剥离它们

请检查正则表达式,如果它不符合您的要求,请参考我发布的链接,构建并迭代,直到您得到一个有效的正则表达式

从那里你可以做一些事情,比如告诉用户他们应该重新输入,或者告诉他们你不接受数字、特殊字符或其他任何东西

希望这有帮助