php编码特殊字符


phpcoding special characters

当我加载一个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({&quot;bar&quot;:&quot;baz&quot;}")>