5

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

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

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

有人对某种转义方法有任何建议吗?

4

4 回答 4

11

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

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

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

于 2010-06-29T22:29:32.380 回答
2

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

<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

于 2010-06-29T22:40:26.693 回答
1

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

于 2010-06-29T22:35:13.330 回答
0

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

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

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

于 2010-06-29T22:54:02.210 回答