Экранирование / кодирование одинарных кавычек в JSON-кодированных атрибутах данных HTML5 - PullRequest
29 голосов
/ 12 января 2012

В PHP я использую json_encode() для отображения массивов в атрибутах данных HTML5. Поскольку JSON требует - и json_encode() генерирует - значения, заключенные в двойные кавычки. Поэтому я обертываю свои атрибуты данных одинарными кавычками, например:

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

Как видите, последний тег (тест) содержит одиночную кавычку, а использование json_encode() без параметров приводит к проблемам с синтаксическим анализом.

Так что я использую json_encode() с параметром JSON_HEX_APOS, и синтаксический анализ в порядке, так как мои одинарные кавычки закодированы, но я задаюсь вопросом: есть ли у этого недостаток, как это?

Ответы [ 2 ]

55 голосов
/ 12 января 2012

Вам необходимо экранировать HTML-данные, отраженные в HTML:

printf('<article data-tags="%s">',
    htmlspecialchars(json_encode(array('html5', ...)), ENT_QUOTES, 'UTF-8'));
10 голосов
/ 14 декабря 2016

или используйте встроенную опцию:

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

Вы можете проверить это в руководстве: http://php.net/manual/en/json.constants.php#constant.json-hex-apos

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...