2010-06-29 75 views
2

我需要能够生成无限数量的数据集,所以我想要做的就是这样的事情;将JSON存储在隐藏的输入元素中?

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

我试图JSON.stringify我的数组转换在JavaScript中,并将其存储在当前隐藏输入元素,但它封装了所有在双引号键和值,这显然与HTML在环绕整个价值冲突双引号。不知怎的,我需要逃避引号,但我需要这两种方式工作......基本上这些元素是用PHP生成的,并按顺序放置在页面中,然后我可以在用户端添加或删除项目并提交页面,这应该让PHP遍历这些隐藏的元素并更新记录。

任何人有任何关于某种逃避方法的建议?

回答

5

可以使用避开功能这里介绍:http://phpjs.org/functions/htmlspecialchars:426

应该逃避JSON字符,让你的字符串安全的,因为HTML属性的值来使用。

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

+0

这正是我需要的!我在PHP中尝试使用addslashes()方向的错误方向,但它们不能在HTML中转义引号。 :( – 2010-06-29 23:03:41

+0

谢谢。当你使用htmlspecialchars()引用你从php发出的html文件时,你是最安全的XSS攻击。 – 2010-06-29 23:12:52

1

BASE64_ENCODE数据或通过ヶ辆运行它()打开引号中的实体:)

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的

0

说实话,如果要设置在JavaScript中值页上,然后我是你遇到了问题有点吃惊,但这里有一些建议: -

当然的适当要做的是HTML编码数据的HTML属性 - 但这需要调用ヶ辆或相似的,所以代替,为什么不URL编码使用的数据“中建” javascript encodedecode和meth消耗臭氧层物质。网址编码应该将双引号转义为'%22'。如果您已经在使用jQuery,请使用val()方法来设置(并获取?)值 - 我相信这会为您处理这些问题(尽管我没有去实际检查过这个问题)。

+0

这不是JavaScript中的设置,因为它是放置在页面中的问题最初通过PHP。我知道有很多方法可以处理双引号,但不知道什么样的工作最好。尽管我最初并没有想到过,但我曾经想过用addslashes,但是斜杠不要在HTML中转义引号>>。> – 2010-06-29 23:01:44