将JSON存储在隐藏的输入元素中?

时间:2010-06-29 22:24:43

标签: php html json hidden-field

我需要能够生成无限数量的数据集,所以我想做的就是这样;

<input type="hidden" name="items[]" value="{id:1,name:'some-name'}" />

我尝试使用JSON.stringify在javascript中转换我的数组并将其存储在当前隐藏的输入元素中,但它将所有键和值包装在双引号中,这显然与HTML包含双引号中的整个值。不知怎的,我需要转义引号,但我需要这两种方式...基本上这些元素是用PHP生成的并按顺序放在页面中,然后我可以在用户端添加或删除项目并提交页面,应该让PHP迭代这些隐藏的元素并更新记录。

任何人对某种逃避方法有任何建议吗?

4 个答案:

答案 0 :(得分:7)

您可以使用此处显示的转义功能:http://phpjs.org/functions/htmlspecialchars:426

它应该在json中转义字符并使你的字符串安全地用作html属性的值。

如果你想在PHP上进行转义,那么你应该使用PHP内置的函数htmlspecialchars()。

答案 1 :(得分:2)

你想要做的是掌握一些html5数据 - * attrubites,这样你就可以点头了

<div id="post-container" data-meta="{id:22,name:'Robert Pitt'}">
   ..
</div>

然后你可以使用htmlentites()来使字符串安全并使用javascript,你可以像这样用javascript获取数据:

function ElementJson(id,attrib)
{
    var post_c = document.getElementById(id);

    for( var x = 0; x < post_c.attributes.length; x++)
    {
        if( post_c.attributes[x].nodeName.toLowerCase() == 'data-' + attrib.toLowerCase())
        {
            return post_c.attributes[x].nodeValue;
        }
    }
    return false;
}
json = ElementJson('post-container','meta');

例如,通过jQuery,你可以做到

json = $('#post-container[data-meta]').attr('data-meta');

很多大型网站都使用它,特别是Facebook

答案 2 :(得分:1)

base64_encode数据或通过htmlentities()运行它以将引号转换为实体:)

答案 3 :(得分:0)

老实说,如果你在页面中设置javascript中的值,那么我有点惊讶你遇到了问题,但这里有一些建议: -

当然正确的要做的事情是HTML编码html属性中的数据 - 但这需要调用htmlentities或类似的,所以相反,为什么不使用“内置”javascript对数据进行URL编码encodedecode以及方法。 URL编码应将双引号转义为'%22'。

或者如果您已经在使用jQuery,请使用val()方法设置(并获取?)值 - 我相信这会为您解决这些问题(尽管我还没有去过并实际检查过这个)。