Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否将JSON存储在隐藏的输入元素中?_Php_Html_Json_Hidden Field - Fatal编程技术网

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

Php 是否将JSON存储在隐藏的输入元素中?,php,html,json,hidden-field,Php,Html,Json,Hidden Field,我需要能够有效地生成无限数量的数据集,所以我想做的是这样的事情 <input type="hidden" name="items[]" value="{id:1,name:'some-name'}" /> 我尝试用JSON.stringify转换javascript中的数组并将其存储在当前隐藏的输入元素中,但它将所有键和值都用双引号括起来,这显然与用双引号括起来的整个值的HTML冲突。不知何故,我需要避开引号,但我需要这两种方式…基本上,这些元素是用PHP生成的,并按顺序放置在

我需要能够有效地生成无限数量的数据集,所以我想做的是这样的事情

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

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


有人对某种转义方法有什么建议吗?

您可以使用此处提供的转义函数:

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


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

base64\u对数据进行编码或通过htmlentities()运行数据,以将引号转换为实体:)

您要做的是掌握一些html5数据-*属性,这样您就可以

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

很多大型网站都使用它,尤其是Facebook。老实说,如果您在页面中使用javascript设置值,那么我有点惊讶您遇到了问题,但这里有几点建议:-

当然,正确的做法是在HTML属性中对数据进行HTML编码——但这需要调用htmlentities或类似的函数。因此,为什么不使用“内置”javascript
encode
decode
和方法对数据进行URL编码呢。URL编码应将双引号转义到“%22”


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

问题不在于Javascript中的设置,而在于它最初通过PHP将其放置在页面中。我知道有很多方法可以处理双引号,但不确定什么方法最有效。虽然我最初没有想到htmlentities…我想到了addslashes,但slashes不会在HTML中转义引号。>>这正是我需要的!我尝试在PHP中使用addslashes()时走错了方向,但它们在HTML中不会转义引号:(谢谢。当使用htmlspecialchars()引用从php发送到html的内容时,您可以最安全地抵御XSS攻击。
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');
json = $('#post-container[data-meta]').attr('data-meta');