ユーザーから送信される「文字列にnullバイトが含まれています」への対処
概要
PostgreSQL/Rails を使用して、メディア ファイルのパスと id3 タグに関する情報を受け取り、それらを Active Record インスタンスに保存する API コントローラーがあります。
ただし、ユーザーが次のような文字列を送信する場合があります。
"genre"=>"Hip-Hop\u0000Hip-Hop/Rap"
そして、Rails/Postgres は、保存時に永続化しようとするときに、それをまったく満足していません。
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 バイトを完全に削除するにはどうすればよいですか?
解決策
String に対する gsub メソッドがおそらく適切です。 string.gsub(“000”, ’’) を実行するだけでそれらを取り除くことができます。
http://ruby-doc.org/core-2.1.1/String.html#method-i-gsub