そんなにGeekじゃないエンジニアブログ

JsonデータをPHPで作成した時のエスケープする、エスケープしないの選択処理の話

calendar

こんにちは。でんすけ(@notgeek_densuke)です。

最近、Google for jobsが日本でも対応される雰囲気が出てきて、やきもきしていたりする私です。

で、Google for jobsなんかで使うJsonデータを、PHPで作るときのエスケープの話。

スポンサーリンク

PHPでJsonデータの作成

PHPでJsonデータを作ろうとすると、こんな感じ。

$jsondata_arr = [];
$jsondata_arr['@context'] = "http://schema.org/";
$jsondata_arr['@type'] = "JobPosting";

// 仕事内容
$jsondata_arr['description'] = "この文字はユニコードです";

return json_encode($data,JSON_PRETTY_PRINT);

配列でデータを作って、
json_encode()を呼ぶ感じ。

JSON_PRETTY_PRINTというオプションをつけておくと、インデントなど整形した文字列にしてくれます。

実行結果はこんな感じ。

{
    "@context": "http:\/\/schema.org\/",
    "@type": "JobPosting",
    "description": "\u3053\u306e\u6587\u5b57\u306f\u30e6\u30cb\u30b3\u30fc\u30c9\u3067\u3059"
}

PHPのjson_encodeでエスケープしないようにする

URLのスラッシュ「/」がエスケープされてたり、
日本語がUnicodeになってたり、
なんかイマイチだなぁ。。

と思ったら、こんな感じにしてみましょう。

return json_encode($data,JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);

・JSON_UNESCAPED_UNICODE
・JSON_UNESCAPED_SLASHES
の2つのオプションを追加しました。

すると、実行結果はこんな感じ。

{
    "@context": "http://schema.org/",
    "@type": "JobPosting",
    "description": "この文字はユニコードです"
}

いい感じですね!

逆に、エスケープしたい文字があるとき

逆に、特定の文字をエスケープしたかったりとかする場合

・JSON_HEX_AMP //「&」を\u0026に
・JSON_HEX_TAG // < および > をそれぞれ \u003C および \u003E に

などが使えます。

詳しくはPHPのマニュアルサイトを参照のこと。

それではまたー。

この記事をシェアする

コメント

コメントはありません。

down コメントを残す




CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください