当我加载一个php页面时,我把一个javascript函数,一个名字。当这个字符串有像'。
这样的特殊字符时,就会出现问题在这里,我粘贴点击事件的代码:
print "%d" % (s)
我认为函数 htmlspecialchars 以某种方式编码字符串但结果是:
print "%06d" % (int(s))
可以看出,在第二个参数中,名称包含'和'之类的字符。
我该如何避免这种情况?
答案 0 :(得分:1)
永远不要将PHP中的文本直接输出到Javascript上下文中。正如您所发现的那样,非常很容易生成JS语法错误。
始终使用json_encode:例如鉴于此
<?php $foo = 'bar'; ?>
<script>
var badly_broken = <?php echo $foo ?>;
var working_fine = <?php echo json_encode($foo); ?>;
</script>
你最终会
<script>
var badly_broken = bar; // oops - undefined variable "bar"
var working_fine = "bar";
</script>
请注意,如果您要将JS输出到HTML属性中,则不仅需要生成有效的Javascript,还必须输出有效的HTML AS WELL :
<?php $foo = array('bar' => 'baz'); ?>
<a onclick="brokenCall(<?echo json_encode($foo) ?>)">
<a onclick="workinCall(<? echo htmlspecialchars(json_encode($foo)) ?>)">
产生
<a onclick="brokenCall({"bar":"baz"})">
^--start attribute
^--end attribute - ruhroh
<a onclick="workingCall({"bar":"baz"}")>