[PHP] json_encodeで"/"が”\/”になってしまう件

2018年3月22日

PHP テクノロジー プログラミング

おはぎが大好きなんですよ。つぶあんがたっぷりのおはぎが。 でも、甘いものばかり食べていると、腹の周りに付いてくる脂肪が気になるじゃないですか? そんな時は、「甘いものは糖分であって、脳みその活性化に役立つから、プログラム作業の時は必須!」と自分に言い聞かせて、満足げにほうばることにしています。 誰にも文句は言わせない!!! さて、これまでjson_encodeの記事を2つ書いてきましたが、ここに来てまた新たに書き足すことになりました。

今回の問題

json_encodeを使って、URLの文字列を値として登録した時のことです。 $data = array("url" => "http://wordpress.ideacompo.com/"); $json = json_encode($data); print_r($json); 上記を実行してみると、下記のような結果になります。 {"url":"http:\/\/wordpress.ideacompo.com\/"} 見事に"/(スラッシュ)"に"\(バックスラッシュ)"がくっついて来ていますね。 これは、本来の仕様なので仕方が無いのですが、このまま文字列として登録するには、気が引けます。 ていうか、エンジニアなら、このまま登録はあり得ません。 初心者エンジニアがこのまま登録して、先輩エンジニアからドヤされるレベルです。 そして、これまでの僕のソースコードを見てみると・・・ $data = array("url" => "http://wordpress.ideacompo.com/"); $json = json_encode($data); $json = str_replace("\/","/",$json); print_r($json); > {"url":"http://wordpress.ideacompo.com/"} 一見、問題無いように見えますが、この度ちゃんと調べると、json_encodeのoptionに「スラッシュにくっつくバックスラッシュを排除するオプション」というのがピンポイントでありました。 http://php.net/manual/ja/function.json-encode.php

オプション

"JSON_UNESCAPED_SLASHES"を引数にくっつけるだけなんです。 $data = array("url" => "http://wordpress.ideacompo.com/"); $json = json_encode($data , JSON_UNESCAPED_SLASHES); print_r($json); > {"url":"http://wordpress.ideacompo.com/"} 正規のオプションを利用しているということで、プログラム記述としてはいいのですが、一つだけ問題点が、このオプションは、PHP5.4以降の対応になっています。 5.3より下のPHPを使用している環境では全く動作しないので、str_replaceで書いた方がいいのですが、この場合、下位互換のある方がプログラムとしては、幅広くていいように感じるのは僕だけなんでしょうか? もちろん、モジュールは最新バージョンを使うという鉄則もありますが、レガシーシステムのリファクタリングの際に、こうした記述を書いてしまい、でもサーバーモジュールはアップできないなんて事になったら・・・アナオソロシヤ・・・ ちなみに、json_encodeで使えるオプション(ビットマスクともいうらしいです)は以下のURLで詳細を確認できます。 http://php.net/manual/ja/json.constants.php ちなみに、僕が個人的に欲しいオプションは「空値の情報を排除する」です。 ""やnullで登録されて、keyや配列順番だけが残るのがゴミでしか無い場合、こんなオプションがあると便利だと思いません? 容量節約機能ですよ。いまどきのエコですエコ

これまでのjson_encode記事

コピペのスニペ・PHP「json_encodeの時の全角対応」 [PHP] json_encodeで見やすく整形する

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。