HTML-тег, который заставляет другие теги отображаться как обычный текст

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

  <myMagicTag>
      <b>Hello</b> World
  </myMagicTag>

Я хочу, чтобы тег <b> отображался только как текст, а не как жирная директива. Я бы предпочел не писать код для преобразования всех "<" на "&lt;".

Я знаю, что <textarea> сделает это, но он имеет другие нежелательные побочные эффекты, такие как добавление полос прокрутки.

Существует ли myMagicTag?

Изменить: функция jQuery или javascript, которая делает это, также будет в порядке. Невозможно сделать это на стороне сервера, к сожалению.

Ответ 1

Вы можете сделать это с помощью script элемента (выделено мною):

Элемент script позволяет авторам включать в свои документы динамические script и блоки данных.

Пример:

<script type="text/plain">
This content has the media type plain/text, so characters reserved in HTML have no special meaning here: <div> ← this will be displayed.
</script>

(Обратите внимание, что допустимое содержимое элемента script ограничено, например, can not </script> в качестве текстового содержимого (он закроет элемент script).)

Обычно элементы script имеют display:none по умолчанию в браузерах CSS, поэтому вам необходимо перезаписать это в вашем CSS, например:

script[type="text/plain"] {display:block;}

Ответ 2

Тег был <XMP>, но в HTML 4 он уже устарел. Браузер, похоже, не отказался от поддержки, но я бы не рекомендовал его ни для чего, кроме быстрой отладки. статья MDN о <XMP> содержит два других тега <plaintext> и <listing>, которые были устарели еще раньше. Я не знаю никакой альтернативы.

Независимо от того, код для кодирования простого текста в HTML довольно прост в большинстве языков программирования.

Примечание: термин аналогичный означает именно то, что все три предназначены для ввода обычного текста в HTML. Я не подразумеваю, что они синонимы или что они ведут себя одинаково - они этого не делают.

Ответ 3

Вы можете использовать функцию, чтобы избежать < > , например:

'span.name': function(){
return this.name.replace(/</g, '&lt;').replace(/>/g, '&gt;');
} 

Также посмотрите <plaintext></plaintext>. Я не использовал его сам, но, как известно, он делает все, что следует, как обычный текст (все, что я хочу сказать, игнорирует закрывающий тег, поэтому весь следующий код отображается как текст)

Ответ 4

Нет, это невозможно, вам нужно HtmlEncode.

Если вы используете серверный язык, это не очень сложно.

В .NET вы бы сделали что-то вроде этого:

string encodedtext = HttpContext.Current.Server.HtmlEncode(plaintext);

Ответ 5

В моем приложении мне нужно предотвратить HTML-рендеринг

"if (a<b || c>100) ..."

и

"cout << ...".

Также весь HTML-код кода кода С++ должен пройти через компилятор GCC с желаемым эффектом. Я ударил по двум схемам:

Во-первых:

//<xmp>
#include <string>
//</xmp>}

По причинам, которые меня избегают, тег <xmp> устарел. Я нахожу (2016-01-09), что Chrome и FF, по крайней мере, делают тег так, как я хочу. Изучая мою проблему, я увидел замечание, что <xmp> требуется в HTML 5.

Во-вторых, в <head> ... </head> вставить:

<style type="text/css">
    textarea { border: none; }
</style>

Тогда в <body> ... </body> напишите:

//<br />  <textarea rows="4" disabled cols="80">
#include <stdlib.h>
#include <iostream>
#include <string>
//</textarea>  <br />

Примечание. Установите "cols="80", чтобы предотвратить появление следующего текста справа. Установите "rows=..." на еще одну строку, чем в теге. Это предотвращает прокрутки. Этот второй метод имеет несколько недостатков:

  • Атрибут "disabled" выделяет область
  • Непонятные, сложные комментарии в коде, отправленном компилятору
  • Труднее понять
  • Больше ввода

Однако этот метод не устарел и не устарел. Боги HTML заставят свои лица сиять вам.