web-dev-qa-db-ja.com

ユーザーから送信された「文字列にnullバイトが含まれています」への対処

メディアファイルのパスとid3タグに関する情報を受け取り、それらをPostgreSQL/Railsを使用してActive Recordインスタンスに保存するAPIコントローラーがあります。

ただし、ユーザーは次のような文字列を送信することがあります。

"genre"=>"Hip-Hop\u0000Hip-Hop/Rap"

そして、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'

Rubyでこの文字列をクリーンアップして、nullバイトを完全に削除するにはどうすればよいですか?

20
John Smith

gsubStringメソッドがおそらく適しています。 string.gsub("\u0000", '')を実行して、それらを取り除くことができます。

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

18
tpbowden