如何在脚本标签内转义JSON数据?

时间:2020-07-12 10:54:35

标签: javascript php html json

我想通过script-tag提供我的JSON数据

<?php

  $myArray = array(
    'a' => 'Hello world!', 
    'b' => '</script>',
    'c' => 123.456,
  );

  $myJson = json_encode($myArray);

?>

<script id="mydata" type="application/json"><?=$myJson?></script>

然后我想用Javascript获取我的JSON数据:

try {

  var myArray = JSON.parse(document.getElementById('mydata').innerHTML);
  console.log(myArray);

} catch(e) {

  console.log(e.message);

}

如何在PHP中转义$myJson字符串以避免HTML错误?

1 个答案:

答案 0 :(得分:0)

获得类似结果的一种方法是将JSON直接分配给JS变量,

<script>
var myVariable = JSON.parse('<?php echo $myJson; ?>');
console.log('myVariable', myVariable);
</script>

但是,如果您坚持按照您提到的方式进行操作,则可以使用htmlentitieshtmlspecialchars进行转义,然后进行this post中提到的一些肮脏的技巧。 / p>

<script id="mydata" type="application/json"><?php echo htmlentities($myJson) ; ?></script>

<script>
var txt = document.createElement("textarea");
txt.innerHTML = document.getElementById('mydata').innerHTML;
console.log('Parsed', JSON.parse(txt.value));
</script>