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');