Сохранить JSON в скрытом элементе ввода? - PullRequest
4 голосов
/ 30 июня 2010

Мне нужно иметь возможность генерировать практически неограниченное количество наборов данных, так что я хочу сделать что-то вроде этого:

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

Я попытался JSON.stringify, чтобы преобразовать мой массив в JavaScript и сохранитьон находится в текущем скрытом элементе ввода, но он заключает все ключи и значения в двойные кавычки, что, очевидно, противоречит HTML, заключая все значение в двойные кавычки.Каким-то образом мне нужно избегать кавычек, но мне нужно, чтобы это работало двумя способами ... в основном эти элементы генерируются с помощью PHP и размещаются на странице по порядку, затем я могу добавлять или удалять элементы на стороне пользователя и отправлять страницу,у которого должен быть PHP, повторяющий эти скрытые элементы и обновляющий записи.

У кого-нибудь есть какие-либо предложения относительно какого-либо метода экранирования?

Ответы [ 4 ]

8 голосов
/ 30 июня 2010

Вы можете использовать функцию экранирования, представленную здесь: http://phpjs.org/functions/htmlspecialchars:426

Она должна экранировать символы в json и сделать вашу строку безопасной для использования в качестве значения атрибута html.

Если вы хотите сделатьпосле выхода из PHP вы должны использовать функцию htmlspecialchars (), встроенную в PHP.

2 голосов
/ 30 июня 2010

То, что вы хотите сделать, это понять некоторые из данных 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

1 голос
/ 30 июня 2010

base64_encode данных или запустить его через htmlentities () чтобы превратить кавычки в сущности:)

0 голосов
/ 30 июня 2010

Если честно, если вы устанавливаете значение в javascript на странице, то я немного удивлен, что вы столкнулись с проблемами, но вот несколько советов: -

Конечно, правильная вещь, которую нужно сделать, - это HTML-кодирование данных в атрибутах html - но для этого требуется вызов htmlentities или аналогичных, поэтому вместо этого URL-адрес не должен кодировать данные с использованием «встроенного» JavaScript 1005 * и decode и методы. Кодировка URL должна экранировать двойные кавычки до «% 22».

Или, если вы уже используете jQuery, используйте метод val() для установки (и получения?) Значения - я уверен, что это решило бы эти проблемы для вас (хотя я не проверял и не проверял это).

...