【问题标题】:Javascript/PHP apostrophe ErrorJavascript/PHP 撇号错误
【发布时间】:2014-01-27 21:34:06
【问题描述】:

当标题包含撇号时,以下代码会产生 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 } ?>

我添加了&lt;a&gt; 所在的foreach 循环。这可能有助于解释为什么此信息位于属性标记中。

【问题讨论】:

  • 不要嵌入 PHP 创建的 JS 代码。至少将值序列化为 JSON 并将其与JSON.parse() 一起使用。考虑使用网络服务。
  • 可能是这样的? &lt;?= json_encode($title); ?&gt;
  • htmlentities 无法用于构建 Javascript...它仅适用于 html 目标。你需要使用 json_encode() 代替。
  • 使用addslashes 而不是htmlentities。
  • 布兰登 - 或多或少。我会把它放在其他地方,而不是属性中,因为 json_encode 可以包含" 字符。

标签: javascript php jquery html


【解决方案1】:

我最终使用了 Eugene Glova 提供的 addlashes 解决方案,正如 Marc B 所说,htmlentities 不是这项工作的正确工具。

有效的更正代码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 2013-03-26
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    相关资源
    最近更新 更多