如何在java脚本onclick标识符中安全地回显php字符串


How to echo php string safely in a java script onclick identifier

请不要将此标记为重复,因为我找不到关于非常相似问题的有效解决方案。它们似乎都无法修复我的特定字符串。

我有这个PHP变量。。。

<?php
   $og_description = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus hendrerit cursus mi, Nullam condi''mentum posuere odio sed cursus.. Proin posue''re fermentum, ligula vel lacinia sollicitudin, libero quam ultrices quam, quis tristique orci... enim a justo!'
?>

上面的字符串与我使用的特殊字符完全相同。

然后,我试图将它回显到这个onclick标识符中。显然,<?php echo $og_description; ?>不会单独工作。

<a href="#" onclick="fb_publish('<?php echo $fb_app_url; ?>','<?php echo $og_title; ?>','images/icon.png','<?php echo $og_description; ?>'); return false;">Post to wall</a>

我试过这些。。。

echo htmlspecialchars($og_description);
echo json_encode($og_description);

和其他一些,但似乎没有什么能将我的字符串固定为不会破坏标识符数组的格式。

有人知道我该怎么解决吗?

谢谢Josh

我不建议使用内联JavaScript,但这里有一种方法:

$anchor_fmt = '<a href="#" onclick="fb_publish.apply(window, %s);return false;">Post to wall</a>';
$js_args = array(
    $fb_app_url, 
    $og_title, 
    'images/icon.png', 
    $og_description
);
echo sprintf($anchor_fmt, 
   htmlspecialchars(json_encode($js_args), ENT_QUOTES, 'UTF-8')
);

它使用json_encode()来形成一个数组,该数组使用.apply()传递给JavaScript函数。最后,您需要确保生成的字符串在HTML上下文中仍然有效。

顺便说一句,它可以完全写在一行中,但为了可读性,我把它分开了。

onclick="fb_publish(<?php echo htmlspecialchars(json_encode($string), ENT_COMPAT); ?>)"

您需要将其转义/编码为有效的Javascript语法,然后对其进行转义/编码,使其成为有效的HTML属性。

您可以先为js变量赋值:

<script>
var fb_app_url = <?php echo json_encode($fb_app_url); ?>;
var og_title = <?php echo json_encode($og_title); ?>;
var og_description = <?php echo json_encode($og_description); ?>;
</script>
<a href="#" onclick="fb_publish(fb_app_url,og_title,'images/icon.png',og_description); return false;">Post to wall</a>