Techioz Blog

ユーザーから送信される「文字列に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