Javascript/PHP单引号错误

3
以下代码在标题中包含撇号(apostrophe)时会产生javascript错误。我认为我使用htmlentities正确地净化了标题字段,但是当标题包含单引号时,仍然会出现javascript错误。
那么,我应该如何正确地清理此字符串,以使该函数在标题包含撇号时正常工作?
Javascript:
<script type="text/javascript">
function open_modal_now(id,title,e){
    e.preventDefault();
    $('#someid').val(id);
    $('#anotherid').val(title);
    $('#yetanotherid').modal('show');
}
</script>

HTML/PHP:

<?php foreach($item as $k => $v){ ?>
<a onClick="open_modal_now(<?= $v['id']; ?>,'<?= htmlentities($v['title'],ENT_QUOTES,"UTF-8"); ?>',event);">Open Modal</a>
<?php } ?>

我添加了foreach循环,使得标签在其中。这可能有助于解释为什么这个信息在属性标签中。

3
不要嵌入由PHP创建的JS代码。至少将该值序列化为JSON,并与JSON.parse()一起使用。考虑使用网络服务。 - Chris Hasiński
2
可能是这样的吗? <?= json_encode($title); ?> - Brandon
1
htmlentities对于构建Javascript来说是毫无用处的...它只适用于HTML目标。你需要使用json_encode()代替。 - Marc B
2
使用 addslashes 代替 htmlentities。 - Eugene Glova
Brandon - 多多少少吧。我会把它放在其他地方,而不是属性中,因为 json_encode 可能包含 " 字符。 - Chris Hasiński
1个回答

0

最终我使用了Eugene Glova提供的addslashes解决方案,正如Marc B所述,htmlentities不是处理这个工作的正确工具。

已经修正的代码如下:

<?php foreach($item as $k => $v){ ?>
<a onClick="open_modal_now(<?= $v['id']; ?>,'<?= addslashes($v['title']); ?>',event);">Open Modal</a>
<?php } ?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接