【问题标题】:How to prepare PHP variable for Javascript array() use?如何为 Javascript array() 使用准备 PHP 变量?
【发布时间】:2012-09-01 06:43:42
【问题描述】:

假设我们有输入字段或文本区域,用户可以在其中放置任何内容。这意味着用户可以放在那里:

  • 文字
  • 空格
  • 多行
  • HTML 标签
  • 单引号和双引号
  • 斜线
  • 等等……

我当前的代码是这样做的:<?php $data = addslashes($content_of_input); ?>

不久之后……

<?php
    $php_generate_javascriptArray .='
        javascriptArray[0] ="'.$data.'";
    ';
?>
<script>
    javascriptArray = [];
    <?php echo $php_generate_javascriptArray; ?>
</script>

不幸的是,添加斜线是不够的 - 当用户将多行或 HTML 链接放入其中时,Javascript 会中断。有什么办法可以防止这种情况发生并且仍然允许 Javascript 数组包含 LINK、MULTIPLE LINES、HTML TAGS?我正在寻找一些通用过滤器。

【问题讨论】:

    标签: php javascript arrays filter sanitization


    【解决方案1】:

    json_encode 会将 PHP 数据结构(或字符串或数字)转换为适当的 JavaScript 数据结构,同时确保安全地注入 HTML 文档中的脚本元素(通过转义斜杠)。

    <script>
        var data = <?php echo json_encode($data); ?> ;
    </script>
    

    【讨论】:

    • 出于某种原因 - 在上面的示例中 - 添加 json_encode() 而不是 addslashes() 会完全破坏 Javascript,即使在使用纯文本时也是如此。也许是因为我使用了双引号?
    • @Paul — 是的,json_encode 将输出一个文字(字符串、数组、对象等)。您需要直接输出它而不是用引号(它可能包含)将其包裹起来以使其成为字符串。
    • 我需要使用 PHP for() 来生成非常非常长的多维 Javascript array()。上面的例子是我唯一的选择。在我的问题中,我简化了它。有没有办法使用我上面的例子来做到这一点?
    • 使用for() 生成一个很长的多维PHP 数组。然后json_encode吧。
    • 编辑:好的,我测试过,到目前为止还可以。
    【解决方案2】:

    使用PHP函数urlencode(...)base64_encode(...) 需要更高级的保护。

    我通常使用 urlencode,在 Javascript 端使用 unescape 来解码 URL 格式数据。

    【讨论】:

      猜你喜欢
      • 2011-11-28
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 2020-12-09
      • 2018-01-30
      • 2011-12-12
      • 2012-01-23
      相关资源
      最近更新 更多