Действительно ли необходимо “выйти” из символа “<” и “>” для строки JavaScript?

На основании ответа от #squiguy, чтобы получить истинную временную метку, я бы напечатал ее из float.

>>> import time
>>> ts = int(time.time())
>>> print(ts)
1389177318

По крайней мере, это концепция.

17
задан Morgan Cheng 23 April 2009 в 01:27
поделиться

3 ответа

Нет, вы не должны избегать < и >, используя HTML-сущности внутри <script> в HTML.

  • Использовать правила экранирования строки JavaScript (заменить \ на \\ и " на \")
  • и заменить все вхождения </ на <\/, чтобы предотвратить выход из элемента <script>.

В XHTML все сложнее.

  • Если вы отправляете XHTML в виде XML (способ, который несовместим с IE) и не используете блок CDATA, то вам нужно экранировать сущности, в дополнение к экранированию строки JavaScript.
  • Если вы отправляете XHTML как XML и используете блок CDATA, тогда не экранируйте сущности, а замените ]]> на ]]]]><![CDATA[>, чтобы предотвратить выход из него (в дополнение к экранированию строки JavaScript).
  • Если вы отправляете XHTML как text/html (что делают 99% людей), вам придется использовать блок XML CDATA, экранирование XML CDATA и экранирование HTML одновременно.
13
ответ дан 30 November 2019 в 12:27
поделиться

Проблема имеет разные ответы в зависимости от того, какой язык разметки вы используете.

Если вы используете HTML, вы не должны представлять их сущностями, поскольку элементы сценария помечены как содержащие CDATA.

Если вы используете XHTML, то вы можете представлять их как CDATA с явными маркерами CDATA или представлять их с помощью сущностей.

Если вы используете XHTML, но используете его как text / html, то вам необходимо написать что-то, что соответствует правилам XHTML, но все еще работает с парсером text / html. Обычно это означает использование явных маркеров CDATA и их комментирование в JavaScript.

<script type="text/javascript">
// <![CDATA[
  …
// ]]>
</script>

Некоторое время назад я написал немного о принципах и причинах этого .

16
ответ дан 30 November 2019 в 12:27
поделиться

The cheap and easy way:

<script type="text/javascript">
    var username = "<%= Encode(UserName) %>";
</script>

where the encoding scheme in Encode is to translate each character of input into the associated \xABCD representation compatible with JavaScript.

Another cheap and easy way:

<script type="text/javascript">
    var username = decodeBase64("<%= EncodeBase64(UserName) %>");
</script>

if you are dealing only with ASCII.

Of course, pst hit the nail on the head with the strict way of doing it.

2
ответ дан 30 November 2019 в 12:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: