web-dev-qa-db-fra.com

Échapper / encoder les guillemets simples dans les attributs de données HTML5 encodés en JSON

En PHP, j'utilise json_encode() pour faire écho aux tableaux dans les attributs de données HTML5. Comme JSON requiert - et json_encode() génère - des valeurs encapsulées par des guillemets doubles. J'enveloppe donc mes attributs de données avec des guillemets simples, comme:

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

Comme vous pouvez le voir, la dernière balise (test) contient un seul guillemet, et l'utilisation de json_encode() sans options conduit à des problèmes d'analyse.

J'utilise donc json_encode() avec le paramètre JSON_HEX_APOS, Et l'analyse est correcte, car mes guillemets simples sont encodés, mais je me demande: y a-t-il un inconvénient à le faire comme ça?

29
Jérémy F.

Vous avez besoin de données d'échappement HTML répercutées en HTML:

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

ou utilisez l'option intégrée:

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

vous pouvez le vérifier dans le manuel: http://php.net/manual/en/json.constants.php#constant.json-hex-apos

11
Picard