【问题标题】:PHP / jQuery - Unexpected identifierPHP / jQuery - 意外的标识符
【发布时间】:2014-08-26 13:22:53
【问题描述】:

我正在使用 PHP 设置一个 jQuery 数组,如下所示:

    <script type='text/javascript'>
    var postQuote = new Array();
    postQuote[<?php echo $post['post_id']; ?>] = <?php echo mysql_real_escape_string(html_entity_decode($post['post_text'])); ?>
   </script>

我的问题是,$post['post_text']; 实际上可以包含所有字符。因此,我收到了 jQuery 的 unexpected identifier 错误。

我的问题是:我怎样才能避免这种情况?

【问题讨论】:

  • 您可能需要将 php 包含在引号中:postQuote["&lt;?php ... ?&gt;"].
  • mysql_real_escape_string 用于 sql,而不用于 javascript。使用json_encode
  • @EndeNeu 如果字符串包含引号、换行符或任何需要在 JavaScript 字符串中编码的字符,则仅使用引号将不起作用。
  • @JuanMendes 确实如此。

标签: javascript php jquery


【解决方案1】:

你为什么不做一个json_encodejson_encode 会将您的 PHP 变量转换为可供 JavaScript 使用的变量。这也可能消除在大多数情况下使用 html_entity_decode 的需要,因为这并不是您真正应该做的事情来转换将由 JavaScript 使用的东西。 mysql_real_escape_string 根本不需要。

<script type='text/javascript'>
    var postQuote = new Array();
    postQuote[<?php echo json_encode($post['post_id']); ?>] = <?php echo json_encode($post['post_text']); ?>
</script>

我还将它们设置为单独的变量,以便它们更容易调试和跟踪:

<script type='text/javascript'>
    var postQuote = new Array();
    var postQuoteKey = <?php echo json_encode($post['post_id']); ?>;
    var postQuoteValue = <?php echo json_encode($post['post_text']); ?>;
    // See what the key and value are
    console.log(postQuoteKey);
    console.log(postQuoteValue);
    postQuote[postQuoteKey] = postQuoteValue;
</script>

以下示例按预期工作:

<script>
// Number
console.log(<?php echo json_encode(1); ?>); 
// String
console.log(<?php echo json_encode("hello"); ?>);
// Boolean
console.log(<?php echo json_encode(false); ?>);
// Boolean
console.log(<?php echo json_encode(true); ?>);
// Array
console.log(<?php echo json_encode(array(1,2,3)); ?>);
// Outputs a JavaScript object
console.log(<?php echo json_encode(array("a" => 345, "b" => '242', "c" => 'hello')); ?>);
</script>

【讨论】:

  • 你应该在向数据库中插入一些东西之前使用mysql_real_escape_string,此时它没有意义,因为它仍然可以在客户端进行操作
  • +1 请注意,如果确实想使用 JavaScript 中的字符串将 HTML 放到页面上,他们应该 HTML 转义内容,但仅在将其插入 DOM 时.使用 JSON 编码绝对是让 PHP 字符串与 JavaScript 字符串完美搭配的最简单方法。
  • @Sepultura 你应该使用mysql_real_escape_string, it's deprecated 你应该使用准备好的语句以获得最大的便携性、安全性和速度php.net/manual/en/pdo.prepare.php
  • 正如 Ende Neu 所说,您可以使用像这样的单引号 ''
  • 自 5.2... 但 5.2 已经 8 岁了。到时候不升级就是边界线不负责任! stackoverflow.com/questions/11684442/…
猜你喜欢
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
  • 2018-03-29
  • 2015-09-14
  • 1970-01-01
  • 2013-09-19
  • 2017-09-05
  • 2020-07-10
相关资源
最近更新 更多