こんにちは。でんすけ(@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のマニュアルサイトを参照のこと。
それではまたー。
コメント
コメントはありません。