web-dev-qa-db-ja.com

JSONエンコードされたHTML5データ属性での単一引用符のエスケープ/エンコード

PHPでは、json_encode()を使用して、HTML5データ属性の配列をエコーし​​ます。 JSONには-とjson_encode()の生成-二重引用符でカプセル化された値が必要なので、そのため、次のようにデータ属性を単一引用符で囲みます。

_<article data-tags='["html5","jquery","php","test's"]'>
_

ご覧のとおり、最後のタグ(テスト)には単一引用符が含まれており、オプションなしでjson_encode()を使用すると、解析の問題が発生します。

したがって、json_encode()を_JSON_HEX_APOS_パラメーターと一緒に使用します。単一引用符がエンコードされているため、解析は問題ありませんが、次のようにしています。

29
Jérémy F.

HTMLにエコーされたデータをHTMLエスケープする必要があります。

printf('<article data-tags="%s">',
    htmlspecialchars(json_encode(array('html5', ...)), ENT_QUOTES, 'UTF-8'));
56
deceze

または、組み込みオプションを使用します。

json_encode(array('html5', ...), JSON_HEX_APOS)

マニュアルで確認できます: http://php.net/manual/en/json.constants.php#constant.json-hex-apos

11
Picard