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

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

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

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

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

MyMagicTag существует?

Редактировать: JQuery или функция JavaScript, которая делает это, также будет в порядке. К сожалению, не могу сделать это на стороне сервера.

5 ответов

Вы можете сделать это с 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 элемент ограничен, например, вы не можете иметь </script> как текстовое содержимое (это закроет script элемент).)

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

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

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

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

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

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

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

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

Нет специального тега, кроме устаревшего <xmp>.
Но тег скрипта может хранить неформатированные данные.

Вот единственное решение, показывающее динамический контент, как вы хотели.
Запустите фрагмент кода для получения дополнительной информации.

<script id="myMagicTag" type="text/plain" style="display:block;">
      <b>Hello</b> World
</script>

Use <a href="https://stackru.com/questions/38143580/when-should-script-tags-be-visible-and-why-can-they">Visible</a> <a href="https://html.spec.whatwg.org/multipage/scripting.html#data-block">Data-blocks</a>

<script>
      document.querySelector("#myMagicTag").innerHTML = "<b>Unformatted</b> dynamic content"
</script>

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

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

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

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

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

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

а также

"cout << ...".

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

Первый:

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

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

.</p><p>Во-вторых, в <code>&lt;head&gt; ... &lt;/head&gt;</code>вставьте:</p><pre><code>&lt;style type="text/css"&gt; textarea { border: none; } &lt;/style&gt; </code></pre><p>Затем в <code>&lt;body&gt; ... &lt;/body&gt;</code>, записывать:</p><pre><code>//&lt;br /&gt; &lt;textarea rows="4" disabled cols="80"&gt; #include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;string&gt; //&lt;/textarea&gt; &lt;br /&gt; </code></pre><p>Примечание: установить <code>"cols="80"</code> чтобы следующий текст не появлялся справа. Задавать <code>"rows=..."</code> на одну строку больше, чем в теге. Это предотвращает полосы прокрутки. Эта вторая техника имеет несколько недостатков:</p><ul><li>Атрибут "disabled" затеняет регион</li><li>Непонятные, сложные комментарии в коде, отправленные компилятору</li><li>Труднее понять</li><li>Больше печатать</li></ul><p>Однако этот метод не устарел и не устарел. Боги HTML заставят их лица сиять перед вами.</p> </div> <div class="a-info"> <div class="row"> <div class="col-sm-2"> <a class="like-button" title="Чтобы оценить ответ необходимо войти под своим логином." > <div class="btn btn-my btn-block" style="background: #bdc3c7 "> <span itemprop="upvoteCount">0</span> <i class="far fa-thumbs-up"></i> </div> </a> </div> </div> <div class="row"> <div class="col-sm-4"> <a class="a-source" href="https://stackoverflow.com/questions/16110382/html-tag-that-causes-other-tags-to-be-rendered-as-plain-text/34697716#34697716" target="_blank">Источник</a> <a class="a-share" href="https://stackru.com/questions/445875/html-teg-kotoryij-zastavlyaet-drugie-tegi-otobrazhatsya-v-vide-prostogo-teksta/445894#445894" itemprop="url">Поделиться</a> </div> <div class="col-sm-8 text-right author" itemprop="author" itemscope="" itemtype="http://schema.org/Person"> <span itemprop="name"> <a href="https://stackoverflow.com/users/1925948/user1925948" class="q-user" rel="noopener" target="_blank">user1925948</a> </span> <span class="q-date" title="2016-01-09 19:08"> 09 янв &#39;16 в 19:08</span> <span class="hidden" itemprop="dateCreated" datetime="2016-01-09 19:08">2016-01-09 19:08</span> </div> </div> </div> <span class="hidden" itemprop="dateCreated" datetime="2016-01-09 19:08">2016-01-09 19:08</span> </div> </div> <div class="text-center"> </div> <div class="text-center"> </div> <div class="another-questions"> <div class="row"> <div class="col-md-12 q-tags"> <b>Другие вопросы по тегам</b> <a href="/questions/tagged/html" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'html'">html</a> <a href="/questions/tagged/html5" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'html5'">html5</a> </div> </div> </div> </div> </div> <div class="col-lg-3 AD"> <div id="allFlyout3-0" style="position: sticky; top: 0;"> </div> </div> </div> </div> </section> </main> <div class="padding"></div> </div> <footer> <div class="container"> <div class="row"> <div class="col-sm-6"> <a href="/"> <img src="/static/img/logo.png" alt="stackru.com - Поиск вопросов и ответов по программированию" /> </a> </div> <div class="col-sm-6 text-right"> <span class="pull-right"><a href="mailto:info@stackru.com">info@stackru.com</a></span> <br /> <span class="license pull-left">licensed under <a href="https://creativecommons.org/licenses/by-sa/3.0/" rel="nofollow license" target="_blank">cc by-sa 3.0</a> with attribution</span> </div> </div> </div> </footer> <!-- Yandex.Metrika counter --> <script type="text/javascript" > (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(53936023, "init", { clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true }); </script> <noscript><div><img src="https://mc.yandex.ru/watch/53936023" style="position:absolute; left:-9999px;" alt="" /></div></noscript> <!-- /Yandex.Metrika counter --> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-141489240-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-141489240-1'); </script> </body> </html>