PHPからJavascriptにデータを渡す方法としてJSON形式に変換がよく使われる。
<?php
$data = array(
'name' => '太郎',
'url' => 'https://github.com',
'age' => 20,
'is_human' => true
);
$json = json_encode($data);
?>
<script>
var json = JSON.parse('<?php echo $json; ?>');
console.log(json);
// => Object {name: "太郎", url: "https://github.com", age: 20, is_human: true}
</script>
しかし、このやり方だと配列に「"」や「'」が含まれるとエラーになる
<?php
$data = array(
'name' => '太郎',
'url' => 'https://github.com',
'age' => 20,
'is_human' => true,
'symbol1' => "'",
'symbol2' => '"'
);
$json = json_encode($data);
?>
<script>
var json = JSON.parse('<?php echo $json; ?>');
console.log(json);
// =>Uncaught SyntaxError: missing ) after argument list
</script>
原因は「"」や「'」がエスケープされていないため。PHPのjson_encodeではデフォルトだとエスケープしてくれない。
- JSON_HEX_APOS
- すべての ' を \u0027 に変換
- JSON_HEX_QUOT
- すべての " を \u0022 に変換