おはぎが大好きなんですよ。つぶあんがたっぷりのおはぎが。
でも、甘いものばかり食べていると、腹の周りに付いてくる脂肪が気になるじゃないですか?
そんな時は、「甘いものは糖分であって、脳みその活性化に役立つから、プログラム作業の時は必須!」と自分に言い聞かせて、満足げにほうばることにしています。
誰にも文句は言わせない!!!
さて、これまで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で見やすく整形する
0 件のコメント:
コメントを投稿