検証する記号

$data = array(1=>'<',2=>'>',3=>'"',4=>"'",5=>'&',6=>'/',7=>"\\");
var_dump($data);
array(7) { [1]=> string(1) "<" [2]=> string(1) ">" [3]=> string(1) """ [4]=> string(1) "'" [5]=> string(1) "&" [6]=> string(1) "/" [7]=> string(1) "\" }

検証1 json_encode($data)

JSONエンコードをかけてダンプしてみる。
$json = json_encode($data);
var_dump($json);
string(60) "{"1":"<","2":">","3":"\"","4":"'","5":"&","6":"\/","7":"\\"}"
input要素にこのJSONを埋め込むとバグになる。
<input type="text" value='<?php echo $json?>' style="width:100%" />

検証2 json_encode($data,true)

JSONエンコードをかけてダンプしてみる。「<」と「>」は変換されている。
$json = json_encode($data,true);
var_dump($json);
string(70) "{"1":"\u003C","2":"\u003E","3":"\"","4":"'","5":"&","6":"\/","7":"\\"}"
input要素にこのJSONを埋め込むとバグになる。
<input type="text" value='<?php echo $json?>' style="width:100%" />

検証3 json_encode($data,JSON_HEX_TAG | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_HEX_APOS)

JSONエンコードをかけてダンプしてみる。「<」、「>」、「"」、「'」は変換されている。
$json = json_encode($data,JSON_HEX_TAG | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_HEX_APOS);
var_dump($json);
string(84) "{"1":"\u003C","2":"\u003E","3":"\u0022","4":"\u0027","5":"\u0026","6":"\/","7":"\\"}"
input要素にこのJSONを埋め込んでもバグにならない。
<input type="text" value='<?php echo $json?>' style="width:100%" />

JavaScriptで埋め込まれたJSON文字列をパースしてみる。

	$json4 = $('#json4').val();
	var data = JSON.parse($json4);
	console.log(data);
Object {1: "<", 2: ">", 3: """, 4: "'", 5: "&", 6: "/", 7: "¥"}