我有一个JS选项var如此:
$output .=
'<script type="text/javascript">
// <![CDATA[
var options = {
render: "canvas",
size: "100",
radius: "0.5",
};
// ]]>
</script>';
但是我需要用PHP变量输出它(echo),它不能在一个单独的文件中,所以我使用常规连接和点.
进行输出,例如'.$var.'
但由于我的JS需要双引号"
,我还将它们放入混合中,从而产生双单引号序列。
var options = {
render: "'.$q_render.'", // Canvas, Div ,Image
size: "'.$q_size.'",
radius: "'. $q_corner_r.'",
};
就我的测试而言,它起作用。
当我需要将$q_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
中的小数点实际上是end concatenation
点。
json_encode()
中并将其发送到裸体战斗并且毫无防御能力。
radius: "'. json_encode( ($q_corner_r )* 0.1 ) .'",
,非常令人惊讶,工作正常。
所以现在一切都有效(不要惊慌) - 但我的怀疑仍然存在。
我该如何处理这种情况? (我知道我在JS之前 CAN 在PHP中做$qr_corner_r = ($qr_corner_r )* 0.1
但是我应该?)
我的代码只能用于纯粹的运气(或愚蠢,或两者兼而有之)。
是否有适合这些情况的其他解决方案/方法?
我们只是在观察一个简单的“错误逃脱”案件吗? (或者在我的情况下没有逃避)
答案 0 :(得分:1)
答案是将您的代码更改为如下所示:
var options = {
render: "'.$qr_ender.'", // Canvas, Div ,Image
size: "'.$q_size.'",
radius: "'. ($q_corner_r * 0.3) .'",
};
您添加了()
但仅在变量周围添加了这些内容,这使它们变得毫无用处。
实际上,您正在执行数学运算,因此通过添加()
,您将在剩下的数据之前隔离要计算的数学,就像在任何其他数学情况下一样。
答案 1 :(得分:1)
你的主要问题是假设JavaScript需要用引号括起来的值,这只是字符串值所需要的,对于数字 - 尤其是你将在计算中使用的数字 - 你应该不加引号。
$output .=
'<script type="text/javascript">
// <![CDATA[
var options = {
render: "canvas",
size: 100,
radius: (' . $q_corner_r . ' * 0.3)
};
// ]]>
</script>';
这样,JavaScript会将它们解释为类型Number
,允许您执行数学计算,而无需依赖JavaScript将字符串值转换回可能产生不确定结果的数字。
作为一项规则,如果您发现自己对转义或多级报价感到困惑,最好重新考虑您的方法。上述内容可以通过json_encoding
整个PHP对象轻松处理,并在PHP端执行乘法。
$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>';
答案 2 :(得分:-1)
试试:
$var = ($q_corner_r* 0.3);
$str ="
var options = {
render: "'.$q_ender.'", // Canvas, Div ,Image
size: "'.$q_size.'",
radius: "'. $var .'",
};
";