我需要能够生成无限数量的数据集,所以我想做的就是这样;
<input type="hidden" name="items[]" value="{id:1,name:'some-name'}" />
我尝试使用JSON.stringify在javascript中转换我的数组并将其存储在当前隐藏的输入元素中,但它将所有键和值包装在双引号中,这显然与HTML包含双引号中的整个值。不知怎的,我需要转义引号,但我需要这两种方式...基本上这些元素是用PHP生成的并按顺序放在页面中,然后我可以在用户端添加或删除项目并提交页面,应该让PHP迭代这些隐藏的元素并更新记录。
任何人对某种逃避方法有任何建议吗?
答案 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编码encode
和decode
以及方法。 URL编码应将双引号转义为'%22'。
或者如果您已经在使用jQuery,请使用val()
方法设置(并获取?)值 - 我相信这会为您解决这些问题(尽管我还没有去过并实际检查过这个)。