假设我们有输入字段或文本区域,用户可以在其中放置任何内容。这意味着用户可以放在那里:
- 文本
- 空白
- 多线
- 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数组包含链接、多行、HTML标签?我正在寻找一些通用的过滤器。
json_encode
将PHP数据结构(或字符串或数字)转换为适当的JavaScript数据结构,同时使其可以安全地注入HTML文档中的脚本元素(通过转义斜杠)。
<script>
var data = <?php echo json_encode($data); ?> ;
</script>
使用PHP函数urlencode(…)或者需要更高级保护的base64_encode(…)。
我通常使用urlencode,在Javascript方面使用unescape来解码URL格式的数据。