web-dev-qa-db-fra.com

Faire face à "la chaîne contient un octet nul" envoyé par les utilisateurs

J'ai un contrôleur API qui reçoit des informations sur le chemin d'accès et les balises id3 d'un fichier multimédia et les enregistre dans une instance Active Record, à l'aide de PostgreSQL/Rails.

Parfois, cependant, l'utilisateur envoie des chaînes telles que:

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

et Rails/Postgres ne sont pas vraiment satisfaits de cela quand on essaie de persister sur 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'

Comment puis-je nettoyer cette chaîne dans Ruby pour supprimer complètement les octets nuls?

20
John Smith

La méthode gsub sur String convient probablement. Vous pouvez simplement faire string.gsub("\u0000", '') pour vous en débarrasser.

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

18
tpbowden