当我加载一个php页面时,我在javascript函数中放入一个名称。当这个字符串包含特殊字符,如'.
时,问题就出现了。这里我粘贴一个点击事件的代码:
showSocialShare(event, '<?php echo $object->slug; ?>', '<?php echo htmlspecialchars($object->title); ?>', '<?php echo $object->image; ?>')
我认为函数htmlspecialchars编码的字符串,但结果是:
showSocialShare(event, '4049269', 'collection-'Noun'', '/img/Original.jpg')
可以看到,在第二个参数中,名称包含'这样的字符,并出现错误。
我怎样才能避免这种情况?
永远不要从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 以及:
<?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"}")>