我用
<?php
$myArr = "foo" => "bar",
"bar" => "foo",;
$myVar = "Word!";
echo '<script type="text/javascript">alert("The $myVar is print_r($myArr) ");</script>';
?>
在页面上显示警告。我认为这是错误的,正确的做法是什么?
在JavaScript上下文中使用的数据应该始终使用json编码。这使得数据可以安全使用,因此您不必担心注入或转义。
<script>
<?php
$myArr = array(1, 2, 3, 4, 5);
$myVar = 'Word!';
echo 'var myArr = ', json_encode($myArr), ';'; // var myArray = [1, 2, 3, 4, 5];
echo 'var myVar = ', json_encode($myVar), ';'; // var myVar = "Word!";
?>
console.log(myArr);
</script>
就像sean9999的答案一样,这个避免了污染全局命名空间,但以更直接的方式,没有PHP短标记。
<?php $bar = "qux"; ?>
<script>
;(function () {
var foo = <?php echo json_encode($bar); ?>;
alert(foo);
}());
</script>
您可以这样做,以限制污染全局命名空间的可能性
<?php
$myArr = ["foo" => "bar", "bar" => "foo"];
$myVar = "Word!";
?>
<script>
;(function(myArr,myVar){
"use strict";
alert( myVar + ' is ' + JSON.stringify(myArr) );
})(<?= json_encode($myArr) ?>,'<?= $myVar ?>');
</script>