Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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
通过ruby进行字符串编码:安全捕获用户输入_Ruby_Character Encoding - Fatal编程技术网

通过ruby进行字符串编码:安全捕获用户输入

通过ruby进行字符串编码:安全捕获用户输入,ruby,character-encoding,Ruby,Character Encoding,我到处寻找一个简单的解决办法。没有一个是简单的或“只是工作” 首先,我不断遇到以下错误: ArgumentError: invalid byte sequence in US-ASCII 这是因为用户正在从Microsoft Word复制和粘贴内容。我只想找到一种方法来清理用户输入,以便它以正确的格式存储在数据库中,而不管它们发送给我什么格式。即使它完全破坏了他们的输入,我也不担心。我只是想强制将他们的输入编码成以后不会抱怨的内容 我试过: ic = Iconv.new('US-ASCII//

我到处寻找一个简单的解决办法。没有一个是简单的或“只是工作”

首先,我不断遇到以下错误:

ArgumentError: invalid byte sequence in US-ASCII
这是因为用户正在从Microsoft Word复制和粘贴内容。我只想找到一种方法来清理用户输入,以便它以正确的格式存储在数据库中,而不管它们发送给我什么格式。即使它完全破坏了他们的输入,我也不担心。我只是想强制将他们的输入编码成以后不会抱怨的内容

我试过:

ic = Iconv.new('US-ASCII//IGNORE', 'US-ASCII')
safe_string = ic.iconv(unsafe_string)
执行上述操作并重新保存新字符串后,错误仍然存在。我试过了

safe_string = unsafe_string.force_encoding('US-ASCII')
仍然给我错误

我也用UTF-8试过上面的方法。同样的事情


在将字符串保存到数据库之前,我是否可以做一些简单的事情来正确地转换字符串?谢谢。

我想我自己找到了解决办法。因此,如果要强制将字符串编码为当前编码,可以执行以下操作:

safe_string = unsafe_string.encode('US-ASCII', :undef => :replace)
但实际上,我建议使用UTF-8。我不确定为什么我的默认编码设置为US-ASCII,我假设rails将默认设置为UTF-8。无论如何,执行以下操作也解决了问题:

Encoding.default_internal = 'UTF-8'
Encoding.default_external = 'UTF-8'
这是放在初始化器中的。如果有人有更好的建议,请告诉我。但我相信UTF-8是最流行的编码,我在几个网站上读到过它是推荐的编码


谢谢。

另外,我使用的是rails 2,似乎默认编码设置为US-ASCII,而它可能应该设置为UTF-8。以下操作也有效:Encoding.default\u internal='UTF-8',Encoding.default\u external='UTF-8'