裏紙に書く程度の内容

php json_encode で"/"のエスケープ

phpのjson_encode()では、’/‘(スラッシュ)はエスケープされて’\/‘となります。
これをエスケープせずにそのままにする方法についてのメモ書き。

optionを使う

json_encode()の第2引数にはオプションが指定できます。
ここにJSON_UNESCAPED_SLASHESを指定するとスラッシュはエスケープされません。

ex.

$data = array("name" => "/test/data/value");

var_dump(json_encode($data));
var_dump(json_encode($data, JSON_UNESCAPED_SLASHES));

実行結果はこちら

string(30) "{"name":"\/test\/data\/value"}"
string(27) "{"name":"/test/data/value"}"

下の行、オプションした方はスラッシュがそのまま出力されています。

但し、このオプションはPHP 5.4.0 以降でのみ有効です。

自分で何とかする

前述のとおりPHPのバージョンが古い場合はオプションが使えないので、自分でどうにかする必要があります。

手っ取り早くpreg_replace()で置換することにします。

$data = array("name" => "/test/data/value");

$json = preg_replace("{\\\/}", "/", json_encode($data));
var_dump($json);

実行結果はこちら

string(27) "{"name":"/test/data/value"}"

※正規表現のデリミタもスラッシュにしてしまうと、下記エラーが出てしまうので注意。

Warning: preg_replace(): Unknown modifier '/'

参考

http://www.1ft-seabass.jp/memo/2011/09/26/php-url-preg_match-trouble-recover/

広告
Index