5

事実上無制限の数のデータセットを生成できるようにする必要があるため、私がやりたいことは次のようなものです。

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

JSON.stringify を試して、配列を JavaScript に変換し、それを現在の非表示の入力要素に格納しましたが、すべてのキーと値を二重引用符で囲みます。これは、値全体を二重引用符で囲む HTML と明らかに競合します。どういうわけか引用符をエスケープする必要がありますが、これを 2 つの方法で機能させる必要があります...基本的に、これらの要素は 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 などを呼び出す必要があるため、代わりに「組み込み」の JavaScript および メソッドを使用してデータを URL エンコードしないでencodeくださいdecode。URL エンコードでは、二重引用符を「%22」にエスケープする必要があります。

または、すでにjQueryを使用している場合は、val()メソッドを使用して値を設定(および取得)します-これらの問題に対処できると確信しています(実際に行って実際に確認したことはありませんが).

于 2010-06-29T22:54:02.210 に答える