Javascript 在回显时连接PHP和JS

Javascript 在回显时连接PHP和JS,javascript,php,escaping,concatenation,Javascript,Php,Escaping,Concatenation,我有一个JS和一个选项变量,如下所示: $output .= '<script type="text/javascript"> // <![CDATA[ var options = { render: "canvas", size: "100", radius: "

我有一个JS和一个选项变量,如下所示:

$output .= 
        '<script type="text/javascript">
         // <![CDATA[

                var options = {
                        render: "canvas", 
                        size: "100",
                        radius: "0.5",
                        };

         // ]]>
         </script>';
在我的测试中,它一直有效

当我需要将
$q\u corner\r
的特定值乘以系数时,绘图变厚:

var options = {
        render: "'.$q_ender.'", // Canvas, Div ,Image
        size: "'.$q_size.'",
        radius: "'. ($q_corner_r )* 3 .'",
        };
这同样有效。 但真正的问题是,我需要是一个十进制值,因此乘以一个十进制因子

var options = {
        render: "'.$q_ender.'", // Canvas, Div ,Image
        size: "'.$q_size.'",
        radius: "'. ($q_corner_r )* 0.3 .'",
        };
在这一点上,PHP抛出了一个错误,因为据它所知,
0.3
中的小数点实际上是一个
结束连接

我的外行解决方案是将问题包装在
json_encode()
中,并将其赤裸裸地发送到战场

radius: "'. json_encode( ($q_corner_r )* 0.1 ) .'",
非常令人惊讶的是,它的效果还不错

所以现在一切都正常了(不要惊慌)——但我的怀疑仍然存在

我该如何处理这种情况?(我知道在JS之前我可以用PHP做
$qr\u corner\u r=($qr\u corner\u r)*0.1
。但我应该吗?)

我的代码只有在纯粹的运气(或愚蠢,或两者兼而有之)下才能工作

是否有其他适合这些情况的解决方案/方法


我们仅仅是在观察一个糟糕的“错误逃跑”案例吗?(或者在我的例子中根本没有转义)

答案是将代码更改为如下所示:

var options = {
    render: "'.$qr_ender.'", // Canvas, Div ,Image
    size: "'.$q_size.'",
    radius: "'. ($q_corner_r * 0.3) .'",
    };
您添加了
()
,但仅在变量周围添加,这使它们变得无用

实际上,您正在执行数学运算,因此通过添加
()
,您将在其余运算之前隔离要计算的那部分数学运算,这与在任何其他数学情况下一样。

尝试:

$var = ($q_corner_r* 0.3);
$str ="
      var options = {
                render: "'.$q_ender.'", // Canvas, Div ,Image
                size: "'.$q_size.'",
                radius: "'. $var .'",
                };
";

您的主要问题是假设JavaScript需要将其值用引号括起来,这仅适用于字符串值,对于数字-尤其是您将在计算中使用的数字-您应该让它们不带引号

$output .= 
  '<script type="text/javascript">
   // <![CDATA[

    var options = {
      render: "canvas", 
      size: 100,
      radius: (' . $q_corner_r . ' * 0.3)
    };

   // ]]>
   </script>';

除了JSON编码之外,其他都是。他的代码中的JSON编码实际上没有做任何事情,它只是因为它的
()
而导致了一个单独的执行范围。(JSON编码一个数字就是一个数字)你有没有注意到整个东西已经在一个php字符串中了??更不用说,在JS
$qr\u corner\u r=($qr\u corner\u r*0.3)
格式错误的代码示例之前,我已经在问题中写到了我可以在PHP中实现它。。。让我困惑。。。sry!就这么做了吗?为什么要忙着用不可读的连接呢?谢谢,这实际上是一个很好的答案。对我来说,将整个选项作为一个对象传递确实会好得多。。
$output .= 
  '<script type="text/javascript">
   // <![CDATA[

    var options = {
      render: "canvas", 
      size: 100,
      radius: (' . $q_corner_r . ' * 0.3)
    };

   // ]]>
   </script>';
$data = (object) array(
  'render' => 'canvas',
  'size' => 100,
  'radius' => ($q_corner_r * 0.3),
);

$output .= 
  '<script type="text/javascript">
   // <![CDATA[

    var options = ' . json_encode($data) . '

   // ]]>
   </script>';