[PHP] json_encode()で、日本語をUnicodeエスケープ(\uXXXX)させない方法
こんにちは、@yoheiMuneです。
今日は、PHPの配列をJSON文字列にする時に使う
なお、PHPを気軽に実行したい場合、オンラインエディタ(Online PHP Editor)が便利です。無料で利用できます。
他にも便利なオプションがあるので、次の章で紹介したいと思います。
ログ出力等する際に、日付文字列をミリ秒まで表示する方法
[PHP] PHPBrewで複数のバージョンを使い分ける
最後になりますが本ブログでは、Python、フロントエンド、インフラ、サーバー、PHP、Swift、Node.js、Java、Linux、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!
今日は、PHPの配列をJSON文字列にする時に使う
json_encode()
関数について、日本語などのマルチバイト文字をエスケープさせない方法を、ブログに書きます。目次
何が問題か
json_encode()
を普通に実行すると、日本語がユニコードでエスケープ(\uXXXX)されます。$data = [ "message" => "こんにちは" ]; json_encode($data); // 出力:{"message":"\u3053\u3093\u306b\u3061\u306f"}
\u3053\u3093\u306b\u3061\u306f
の部分がUnicodeエスケープですが、これをさせたくない場合にどうしたら良いか、を解決したいと思います。なお、PHPを気軽に実行したい場合、オンラインエディタ(Online PHP Editor)が便利です。無料で利用できます。
ユニコードエスケープさせないオプション
Unicodeエスケープさせないようにするには、JSON_UNESCAPED_UNICODE
オプションを指定して、json_encode()
を実行します。$data = [ "message" => "こんにちは" ]; json_encode($data, JSON_UNESCAPED_UNICODE); // 出力:{"message":"こんにちは"}これで無事に日本語がそのまま表示されました。
他にも便利なオプションがあるので、次の章で紹介したいと思います。
そのほかのオプション
JSON_UNESCAPED_UNICODE
以外にも、オプションがいくつか存在します。その中で、使う場面があるものを紹介したいと思います。< と > をエスケープする
JSON_HEX_TAG
オプションを使うと、< と > をエスケープして、出力できます。// < と > をエスケープする. $data = [ "message" => "<p>hello</p>" ]; json_encode($data, JSON_HEX_TAG); // {"message":"\u003Cp\u003Ehello\u003C\/p\u003E"}
「/(スラッシュ)」をエスケープさせない
「/(スラッシュ)」は通常エスケープされますが、JSON_UNESCAPED_SLASHES
を使うと、スラッシュのエスケープを抑止できます。// 「/(スラッシュ)」をエスケープしない(未指定の場合、「/」は「\/」とエスケープされます). $data = [ "url" => "https://www.yoheim.net" ]; json_encode($data, JSON_UNESCAPED_SLASHES); // {"url":"https://www.yoheim.net"}
その他のオプション
ここで紹介したオプション以外にもオプションがあります・オプションの一覧は「PHPマニュアル - 定義済み定数」をご参照ください。複数のオプションを同時に使う
複数のオプションを同時に指定したい場合、オプションを「|(パイプ)」で繋げます。// 2つのオプションを同時に指定する場合「|(パイプ)」を使う. $data = [ "message" => "この辺りまで自由に使えるようになると、かなり実装力が高めだと思いです。こんにちは
" ]; json_encode($data, JSON_HEX_TAG | JSON_UNESCAPED_UNICODE); // 出力例:{"message":"\u003Cp\u003Eこんにちは\u003C\/p\u003E"}
合わせて読みたい
PHPについて、下記の記事も参考になれば幸いです。もし良ければご覧ください。ログ出力等する際に、日付文字列をミリ秒まで表示する方法
[PHP] PHPBrewで複数のバージョンを使い分ける
最後に
今回はログ出力時に、JSON文字列でエスケープさせたくないと思い、調べて試して、無事に解決できました。トライ&エラーで得た知見をブログに書き、誰かの役に立てれば幸いです。最後になりますが本ブログでは、Python、フロントエンド、インフラ、サーバー、PHP、Swift、Node.js、Java、Linux、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!