Ruby で MySQL から改行コード(\n)を含んだ文字列を取得しようとすると、
なぜか自動的にエスケープされて \n という形で取得されて、困っています。
また、バックスラッシュだけでなくダブルクォーテーションなどもエスケープされて " というような形で取得されてしまいます。
MySQL の接続には mysql2 を使用しています。
例)
<p class="hello">\nこんにちは\n</p>
このような形でデータベースに保存されているのですが、
Ruby から取得しようとすると、、、
<p class=\"hello\">\\nこんにちは\\n</p>
このような形で取得されてしまいます。
phpで取得すると正しく取得できていますし、直接データベースを見てもエスケープされた状態で保存されているわけではないようです。
Ruby での確認には p を使いました。
Ruby
1require 'mysql2' 2client = Mysql2::Client.new(host: DB_HOST, username: DB_USER, password: DB_PW, database: DB_DATABASE) 3sql = "SELECT * FROM articles" 4 5results = {} 6client.query(sql).each do |row| 7 row.each do |key, val| 8 result[key] = val 9 end 10end 11 12p result
推測では、SQLインジェクションなどの対策のために、mysql2が自動でエスケープしているのだと思っております。
これは mysql2 の仕様なのでしょうか?
また、エスケープせずに取得する方法はありますでしょうか?
なければ、逐一、文字列から検索して置換するほかないでしょうか?
回答1件
あなたの回答
tips
プレビュー