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

binary-2326145_1280
LINEで送る
Share on GREE
Share on LinkedIn

おはぎが大好きなんですよ。つぶあんがたっぷりのおはぎが。
 

でも、甘いものばかり食べていると、腹の周りに付いてくる脂肪が気になるじゃないですか?
 

そんな時は、「甘いものは糖分であって、脳みその活性化に役立つから、プログラム作業の時は必須!」と自分に言い聞かせて、満足げにほうばることにしています。
 

誰にも文句は言わせない!!!
 

さて、これまでjson_encodeの記事を2つ書いてきましたが、ここに来てまた新たに書き足すことになりました。

今回の問題

json_encodeを使って、URLの文字列を値として登録した時のことです。
 

 

上記を実行してみると、下記のような結果になります。
 

 

見事に”/(スラッシュ)”に”\(バックスラッシュ)”がくっついて来ていますね。
これは、本来の仕様なので仕方が無いのですが、このまま文字列として登録するには、気が引けます。
ていうか、エンジニアなら、このまま登録はあり得ません。
初心者エンジニアがこのまま登録して、先輩エンジニアからドヤされるレベルです。
&nbdp;

そして、これまでの僕のソースコードを見てみると・・・

 

一見、問題無いように見えますが、この度ちゃんと調べると、json_encodeのoptionに「スラッシュにくっつくバックスラッシュを排除するオプション」というのがピンポイントでありました。
 

http://php.net/manual/ja/function.json-encode.php

オプション

“JSON_UNESCAPED_SLASHES”を引数にくっつけるだけなんです。
 

 

正規のオプションを利用しているということで、プログラム記述としてはいいのですが、一つだけ問題点が、このオプションは、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で見やすく整形する

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です