PHP回显使用PHP变量的JavaScript警报的正确格式是什么?

PHP回显使用PHP变量的JavaScript警报的正确格式是什么?,javascript,php,html,alert,Javascript,Php,Html,Alert,我曾经 在页面上显示警报。我认为这是错误的,正确的方法是什么?您应该始终对JavaScript上下文中使用的数据进行JSON编码。这使得数据可以安全使用,因此您不必担心注入或转义 <?php $myArr = "foo" => "bar", "bar" => "foo",; $myVar = "Word!"; echo '<script type="text/javascript">alert("The $myVar is

我曾经



在页面上显示警报。我认为这是错误的,正确的方法是什么?

您应该始终对JavaScript上下文中使用的数据进行JSON编码。这使得数据可以安全使用,因此您不必担心注入或转义

<?php     
$myArr =  "foo" => "bar",
          "bar" => "foo",; 
$myVar =  "Word!";

echo '<script type="text/javascript">alert("The $myVar is print_r($myArr) ");</script>';
?>

console.log(myArr);

以下是您如何以限制污染全局名称空间的可能性的方式执行此操作

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

;(功能(myArr、myVar){
“严格使用”;
警报(myVar+'is'+JSON.stringify(myArr));
})(,'');
与之类似,这一方法避免了对全局名称空间的污染,但更简单,没有PHP短标记

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

;(功能(){
var foo=;
警报(foo);
}());

它不起作用bc无效phpI怀疑真正的问题是$myArr值周围缺少方括号-请参阅我对Paul答案的编辑。事实上,PrimtIrr()不会在该字符串中运行。实际上我复制了数组,并没有复制它,只为演示HeSeHeLundDeNo.<代码> var >代码>语句在<代码> <代码>标签中。@ WAR10CK是的,谢谢。所有的都是真的-但是考虑到OP,考虑实际上包括请求的<代码>警报()。我选择不使用通常不可见的
console.log()
@PaulRoub,因为这会使事情复杂化,因为他想要的是与
print\r()
等价的东西。我不想把他和把它串起来展示混淆。通过这种方式,他得到了一个数组和字符串的示例,并学习了如何一次就正确地调试所有内容。如果我有多个这样的代码段,这是一个好的解决方案吗?即使
$myVar
是一个字符串,您仍然必须转义它。虽然这个字符串现在包含“Word!”,但肯定不会总是这样。即使您确实想将其用作字符串,它也缺少引号
json_encode()
JavaScript上下文中使用的所有内容,您无需担心。谢谢@Brad。我加了引号。
<?php $bar = "qux"; ?>

<script>
;(function () {
    var foo = <?php echo json_encode($bar); ?>;
    alert(foo);
}());
</script>