【问题标题】:How to escape a JSON-data inside the script-tag?如何在脚本标签中转义 JSON 数据?
【发布时间】:2020-07-12 10:54:35
【问题描述】:

我想通过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-string 以避免 HTML 错误?

【问题讨论】:

    标签: javascript php html json


    【解决方案1】:

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

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

    但是如果你坚持按照你提到的方式做,那么你可以使用htmlentitieshtmlspecialchars 来逃避它,然后做一些this post 中提到的肮脏的黑客攻击。

    <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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 2017-01-04
      • 2021-01-27
      • 1970-01-01
      • 2016-05-21
      相关资源
      最近更新 更多