teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コメントの指摘を受けて加筆修正

2020/05/31 02:57

投稿

hope_mucci
hope_mucci

スコア4447

answer CHANGED
@@ -1,6 +1,14 @@
1
+ ### 結論から言うと
1
- 結論から言うとそのまま保存するべきです。
2
+ **後続処理の安全性を考える、**そのまま保存するべきです。
2
3
 
3
4
  `&#39`は文字参照といい、シングルクォート`'`を表しています。(文字参照って何?と思われる場合はご自分で調べてください)
4
- なんで文字参照に変換されているのかというと、jsonデータ上でシングルクォートがデータとして入っていると文字列のくくりと区別がつかなくなり誤作動を起こすからです。
5
+ ~~なんで文字参照に変換されているのかというと、jsonデータ上でシングルクォートがデータとして入っていると文字列のくくりと区別がつかなくなり誤作動を起こすからです。
5
- (例えば `'message' : 'Let's Go'`なんてデータを作るとエラーになるのは自明ですね)
6
+ (例えば `'message' : 'Let's Go'`なんてデータを作るとエラーになるのは自明ですね)~~
6
- jsonデータとして使用しないテキストデータとして保存するのであれば文字参照を参照先の文字に変換して保存すればいいのですが、少なくとも後続処理でjsonとして使いたいのであればそのままにすべきです。
7
+ jsonデータとして使用しないテキストデータとして保存するのであれば文字参照を参照先の文字に変換して保存すればいいのですが、少なくとも後続処理でjsonとして使いたいのであればそのままにすべきです。
8
+
9
+ ### 指摘を受けて追記
10
+ jsonではクォーテーションにダブルクォート以外の文字は受け付けない仕様であることを失念していました。jsonに限って言えばデータ中にシングルクォートが混じっていても全然問題ないです。
11
+ ただ、javascriptやpythonではデータのくくりは`''`でも`""`でも良いですし、youtube API側では生のシングルクォートがデータ中に入るのを避けているのではないかなと想像もできます。
12
+ また、別のシステムで当該のデータを使おうとするとき、エスケープ済み(文字参照が残っているデータ)のデータのほうがアンエスケープ(文字参照を実際の文字に戻した)したデータよりも安全に扱えます。アンエスケープは本当に必要な場面になって初めて行う方が安全と考えます。
13
+ 以上のことにより、分かりやすくアカン例を使って「本当に変換が必要な場面まではそのままにしておくべき」とアドバイスしました。
14
+ '以外の文字参照が今後出てこないとも限りませんし。"来たら本当に壊れますし。