www.lom599.com稠浊编程时,关于php传值给js的题目

1.代码示例

<?php
    $std = new stdClass;
    $std->one = "whats wrong";
?>

<script type="text/javascript">
    var jsTest = <?php echo json_encode$std; ?>;   //写法1
    //var jsTest = JSON.parse<?php echo json_encode$std; ?>; //写法2
</script>

2.题目描绘
在以上的代码中,变量jsTest实际上曾经是一个东西了。但由于php的json_encode输入的是一个json字符串,正常写法应该是我注释失的写法2,但是由于东西$std中的一个属性是带有单引号的,以是写法2中,无论JSON.parse中运用单双引号分析,都市报错
(1)题目1:写法1中,是由于js内核分析的缘由招致php输入的json字符串实际上被强迫转换成了js能分析的东西的吗
(2)题目2:假如js脚本中要正常失掉东西$std,除开写法1另有别的的写法吗

PHP在<script></script>里输入数据给JS表达式时,为了避免恶意构造毁坏JS表达式,发起在JSON编码时将特别字符尖括号,单引号,双引号,&转为Unicode字符后输入.

<script>
<?php
$arr = array
    //左边的注释是颠末下面的json_encode编码后的后果
    HTML特别字符< > \ " &, // "HTML\u7279\u6b8a\u5b57\u7b26\u003C \u003E \u0027 \u0022 \u0026"
    <script>alert</script>, // "\u003Cscript\u003Ealert\u003C\/script\u003E"
    \u003cimg src=1 onerror=alert/xss/\u003e, // "\\u003cimg src=1 onerror=alert\/xss\/\\u003e"
    \x3Cimg src=1 onerror=alert/xss/\x3E, // "\\x3Cimg src=1 onerror=alert\/xss\/\\x3E"
;
?>
var json = <?php echo json_encode$arr, JSON_HEX_TAG|JSON_HEX_APOS|JSON_HEX_QUOT|JSON_HEX_AMP; ?>;
</script>

eval拼接一个呢?

我的做法是用json_encodearray来做,array中的每个元素都中断urlencode

写法1 真实是我以为服从最高也是最简明的写法。这种写法便是相称于原生 js 的写法。

var jsTest = {"one":"whats wrong"};

存在的问体便是:可以由于天生的东西不符合 JS 语法,招致语法错误,后面的js不再被实行,不过终究用了json_encode,普通叶不会出什么题目。

第二种写法真实应该改为,真实我以为不好:

ar jsTest = JSON.parse<?php echo str_replace"","\\",json_encode$std; ?>;

(看完/读完)这篇文章有何感想! www.lom599.com的分享…

发表评论

姓名 *
电子邮件 *
站点