处理用户发送的"字符串包含空字节"

Joh*_*ith 20 ruby postgresql ruby-on-rails

我有一个API控制器,它接收有关媒体文件的路径和id3标签的信息,并使用PostgreSQL/Rails将它们保存到Active Record实例.

但有时用户会发送字符串,例如:

"genre"=>"Hip-Hop\u0000Hip-Hop/Rap"
Run Code Online (Sandbox Code Playgroud)

和Rails/Postgres在尝试坚持时并不完全满意save:

An ArgumentError occurred in internals#receive:

 string contains null byte
 activerecord (3.2.21) lib/active_record/connection_adapters/postgresql_adapter.rb:1172:in `send_query_prepared'
Run Code Online (Sandbox Code Playgroud)

如何在Ruby中清除此字符串以完全删除空字节?

tpb*_*den 21

gsub方法上String可能是合适的.你可以做到string.gsub("\u0000", '')摆脱它们.

http://ruby-doc.org/core-2.1.1/String.html#method-i-gsub

  • 有没有理由不使用`string.delete("\ u0000")`? (4认同)
  • 没有,那也行不通,`string.tr`也行。实际上,在这种情况下,`tr`和delete都比`gsub`更合适。 (2认同)