JSONオブジェクトをHTML要素の属性に配置する必要があります。
HTMLは検証する必要はありません。Quentinによる回答:JSONを
data-*
属性に格納します。これは有効なHTML5です。JSONオブジェクトは任意のサイズ-つまり巨大
森まいくの回答:HTML属性の制限は、潜在的に65536文字です。
JSONに特殊文字が含まれている場合はどうなりますか?例えば
{foo: '<"bar/>'}
Quentinによる回答:通常の規則に従って、属性に入れる前にJSON文字列をエンコードします。PHPの場合は、関数を使用します。
htmlentities()
編集-PHPとjQueryを使用したソリューションの例
JSONをHTML属性に書き込む:
<?php
$data = array(
'1' => 'test',
'foo' => '<"bar/>'
);
$json = json_encode($data);
?>
<a href="#" data-json="<?php echo htmlentities($json, ENT_QUOTES, 'UTF-8'); ?>">CLICK ME</a>
jQueryを使用してJSONを取得する:
$('a').click(function() {
// Read the contents of the attribute (returns a string)
var data = $(this).data('json');
// Parse the string back into a proper JSON object
var json = $.parseJSON($(this).data('json'));
// Object now available
console.log(json.foo);
});
data-json
を付ける場合$(this).data('json')
は、を使用する必要があります。jQueryはその部分をカバーしています。