phpMyAdminで「JSONエクスポート」した際のエスケープ(?)について


DBに、
  $connect->query(''SET NAMES utf8'')

として格納している文字列データを、「JSONエクスポート」すると、
  $connect->query(\'SET NAMES utf8\')

となってしまい、JSONを処理する際、エラーになります。

どうして「''」は「\'」へ変換されるのでしょうか?
また、これを回避するには、どうすればいいでしょうか?

phpMyAdmin
バージョン: 3.5.0

回答の条件
  • 1人50回まで
  • 登録:2012/06/16 19:14:25
  • 終了:2012/06/18 20:44:05

ベストアンサー

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492012/06/16 19:57:39

質問文ではシングルクォーテーションを2個続けて書いてますが、
phpの文法的におかしいのでダブルクォーテーションに読み替えて回答を書きます。


JSONのデータはダブルクォーテーションで囲みますので、
データ内にダブルクォーテーションがあると、
区切る場所がおかしくなって正常なデータとして扱えなくなります。

おかしくなった例

"$connect->query("SET NAMES utf8")" は
"$connect->query(" が一つのデータとして扱われ、
続くSの時点でエラーとなってしまいます。

変なところで区切られてしまうことを回避(エスケープ)するために、
半角の¥マーク(英文だとバックスラッシュになります)をつけます。

"$connect->query(\"SET NAMES utf8\")"

これは仕様なので回避する方法はありません。

JSONデータをインポートするソフトは、
自動的にエスケープを削除したりしてくれるはずですが、
自分でプログラムを書いて読み込ませてる場合には、
エスケープ文字(半角の¥)を削除しないといけないかもしれません。

id:railway0

回答ありがとございます。

説明、大変詳しくて分かりやすかったです。

>自分でプログラムを書いて読み込ませてる場合には、
>エスケープ文字(半角の¥)を削除しないといけないかもしれません。
この方法を試すか、あるいは、別の方法(phpMyAdmin以外)でのJSON変換を検討してみようと思います。

色々参考になりましたー

2012/06/18 20:50:27
id:windofjuly

>別の方法(phpMyAdmin以外)でのJSON変換

phpMyAdminの仕様ではなくてJSONの仕様なので、
別の方法を使ってもJSON形式で出力する場合には同じことになりますよ。

2012/06/18 20:53:07

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません