在PHP中使用Base64和JSON编码数组,作为HTML数据属性,在JavaScript中进行解码和解析。带着适当的逃生

时间:2017-06-10 作者:setterGetter

我希望在正确转义的同时将任意数组从PHP传递到JavaScript。我倾向于使用base64,我认为base64不是数据属性安全的,所以作为一名优秀的开发人员,我是esc\\u attr the data。是否有right 如何确保base64数据在JavaScript中保持其完整性?

这是一个精心设计的示例,效果很好,因为esc\\u attr不会修改base64编码的完整性。

<?php

$array = [
    [
        \'the\' => \'quick\',
        \'brown\'  => \'fox\'
    ],
    [
        \'test\' => \'test\',
        \'foo\'  => \'bar\'
    ]
];
$values_json = base64_encode( json_encode( $array ) );
?>

<input id="check" type="checkbox" data-value="<?php esc_attr_e( $values_json ); ?>"> Foobar

<script>
    var checkbox = document.getElementById(id);
    checkbox.addEventListener(\'click\',
        function () {
            console.log(JSON.parse(atob(this.dataset.value)));
        }
    );
</script>
在我的研究中this solution for handling this using JSON - 然而,在获取数据的方式上,我没有一种简单的方法可以通过使用键作为数据属性为数据设置键来检索数据。

1 个回复
最合适的回答,由SO网友:birgire 整理而成

的可能输出base64_encode() 包含a-zA-Z0-9+/ 还有可能=== 已附加。

使用进行测试

$str = \'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=\';
我们发现:

esc_attr( $str ) === $str 
是真的,所以看起来esc_attr() 保留base64编码的字符串。

possible regexes 帮助验证,但根据answer 通过@BoltClock,我们可以使用以下第二个参数进行检查:

base64_decode( $str, $strict = true )
然后,我们可以将其包装成如下函数:

function is_base64( $str )
{
    return base64_decode( $str, true) !== false;
}
在PHP中验证它。

结束

相关推荐

JSON在json_encode发布后无效

在数据库的自定义表中保存JSON时遇到问题。我从数据库中提取一些帖子(+连接的帖子),并将它们添加到一个数组中。这是我的阵列的一部分:array(2) { [\"post\"]=> array(22) { [\"post_author\"]=> string(1) \"1\" [\"post_date\"]=> string(19) \"2015-07-30 13:36:23\