Если вы используете XHTML, вы сможете использовать ссылки на сущности (<
, >
, &
) для экранирования любой строки, которую вы хотите в <script>
. Вы бы не хотели бы использовать секцию <![CDATA[...]]>
, потому что последовательность "]]>
" не может быть выражена в секции CDATA, и вам пришлось бы изменить сценарий, чтобы выразить ]]>
.
Но вы, вероятно, не используете XHTML. Если вы используете обычный HTML, тег <script>
действует как раздел CDATA в XML, за исключением того, что он имеет еще больше подводных камней. Это заканчивается </script>
. Существуют также тайные правила, разрешающие <!-- document.write("<script>...</script>") -->
(оба комментария и открывающий тег <script>
должны присутствовать для прохождения </script>
). Компромисс, принятый редакторами HTML5 для будущих браузеров, описан в HTML 5 tokenization и CDATA Escape
Я считаю, что вы должны предотвратить появление </script>
в вашем JSON, и чтобы быть в безопасности, вы должны также избегать <script>
, <!--
и -->
, чтобы предотвратить нежелательные комментарии или теги скрипта. Я думаю, что проще всего заменить <
на \u003c
и -->
на --\>