2013-02-08 3 views
5

В HTML теги и сущности не обрабатываются в тегах <script>, а </ сразу заканчивает тег. Таким образом,Escape</ in содержимое тега скрипта

<script><b>fun &amp; things</ 

даст вам тег сценария с точным содержанием <b>fun &amp; things.

Если вы в том числе JSON, и вы хотите включить символы </ в вашем сценарии, то вы можете заменить его <\/, потому что единственное место для тех символов, которые появляются в строке, и \/ является последовательность символов, которая превращается в одну косую черту.

Однако, если вы не используете JavaScript, этот трюк не работает. В моем случае я специально пытаюсь вставить <script type="math/tex"> в источник, так что MathJax обработает его. Есть ли способ избежать </ в исходном HTML-коде? (У меня нет особой необходимости для </, но я пишу универсальный инструмент и хочет, чтобы сделать возможным использовать любой текст.)

(Можно создать тег сценария в JavaScript и заполнение своих innerText, но я работаю с необработанным HTML, поэтому я не могу этого сделать.)

+2

Вы не можете использовать '<'? Мне непонятно, что вы пытаетесь сделать здесь. – Oded

+0

Итак, в основном, вы пытаетесь закодировать любой HTML-код между ' 'тегами без кодирования самих тегов скрипта? – sbeliv01

+2

@Oded: Нет, из-за того, как работают теги скриптов, если вы используете '<', вы фактически получите четыре символа' '' '' '' '' '' '' '' '' '' '. –

ответ

4

В HTML, в отличие от XHTML, содержимое элемента script обрабатывается как обычный текст, за исключением появления конечного тега, так что </ завершает обработку и должен , в соответствующих документах, запустите конечный тег </script>. Для избежания этого нет общего механизма. Любые методы, которые обходят эту функцию, неизбежно зависят от «языка», используемого внутри элемента. Слово «язык» находится здесь в кавычках, потому что контент может быть примерно любым, если ваш код может анализировать и обрабатывать его.

Итак: нет общего механизма, но для контента, отличного от JavaScript или некоторых из немногих других языков сценариев на стороне клиента, распознаваемых некоторыми браузерами, вы можете создавать свои собственные правила.

+2

Не является Unicode '\ u003c'-подобной кодировкой внутри тега скрипта универсальным решением? Он реализован для JSON в Rails и Flask (ссылки на реализацию в нижней части моего вопроса: http://stackoverflow.com/q/39193510/518169) – zsero

0

Может понадобиться кодировка HTML? &lt; для <.

Сложно узнать, что вы с ним делаете. Если вы не уверены в том, что содержимое между тегами сценария может быть (? Похоже, что вы, возможно, пытается использовать его в качестве держателя шаблона какой-то), то вы можете/должны использовать раздел CDATA:

<script><![CDATA[<b>fun &amp; things</b>]]></script> 

Это должно сделать это. Более подробное описание может помочь дать лучший ответ тоже :)

+3

Помните, что CDATA - это функция XHTML, и ничего не делает в HTML. –

11

Я пришел сюда, чтобы найти способ полностью избежать </script> внутри кода JavaScript.

После небольшого исследования я понял, что если вы пытаетесь избежать </script> в коде JavaScript, поэтому он может быть безопасно встраивается в HTML между <script> и </script> тегов вы должны заменить </script с </scr\ipt или </scri\pt. Это безопаснее делать, потому что если вы замените его <\/script вы можете сломать JavaScript кода: var q = -1</script/.test("script");

Будьте осторожны, чтобы не искать </script> а </script потому что </script asdasdas> закончится ваш сценарий точно так же, как </script> делает.

Извините, это не помогает Бен Альперту в любом случае. Принятый ответ абсолютно правильный, что вам нужно знать, какие конструкции являются законными на языке, который у вас есть в вашем <script></script>, чтобы знать, как избежать ошибки </script>, не нарушая код.

+0

Пространство имеет значение между ' justingordon

+0

@justingordon '

Смежные вопросы