Échappement / encodage des guillemets simples dans les attributs de données HTML5 codés JSON

En PHP, j'utilise json_encode() pour faire écho aux tableaux dans les attributs de données HTML5. Comme JSON l'exige-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 entraîne 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 codés, mais je me demande: y a-t-il un inconvénient à le faire de cette façon?

27
demandé sur lorem monkey 2012-01-12 13:16:06

2 réponses

Vous devez HTML échapper les données en écho dans HTML:

printf('<article data-tags="%s">',
    htmlspecialchars(json_encode(array('html5', ...)), ENT_QUOTES, 'UTF-8'));
50
répondu deceze 2012-01-12 09:19:36

Ou utiliser l'option:

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

9
répondu Picard 2016-12-14 13:44:17