So zeigen Sie rohen HTML-Code auf einer HTML-Seite an

Lesezeit: 4 Minuten

Benutzer-Avatar
Stefan

Wie kann ich HTML-Snippets auf einer Webseite anzeigen, ohne sie ersetzen zu müssen? < mit &lt; und > mit &gt;?

Mit anderen Worten, gibt es ein Tag für Rendern Sie kein HTML, bis Sie auf das schließende Tag treffen?

Die altbewährte Methode für HTML:

  1. Ersetze das & Charakter mit &amp;
  2. Ersetze das < Charakter mit &lt;
  3. Ersetze das > Charakter mit &gt;
  4. Umgeben Sie optional Ihr HTML-Beispiel mit <pre> und/oder <code> Stichworte.

  • Tipp: Um das Ersetzen des HTML-Codes zu beschleunigen, können Sie Notepad++ mit der Erweiterung „TextFX“ verwenden. Markieren Sie den Text, gehen Sie zu Menü >TextFX >TextFX Convert >Encode HTML (&<>“) → Fertig.

    – Benutzerbild

    13. Januar 2013 um 18:07 Uhr

  • Gibt es zufällig eine vorhandene JavaScript-Bibliothek, die dies kann?

    – Anderson Green

    12. April 2013 um 22:42 Uhr

  • Dies beantwortet nicht die Frage, die lautete „ohne dass ersetzt werden muss …“. Außerdem ist das Ersetzen von „>“ unnötig.

    – Jukka K. Korpela

    24. April 2014 um 11:19 Uhr

  • Und die Reihenfolge ist auch wichtig. Stellen Sie sicher, dass Sie damit umgehen & zuerst und < nachher.

    – Tolga Evcimen

    18. Juni 2015 um 5:34 Uhr

  • @AndersonGreen Hier ist die Bibliothek: export const escapeHtml = str => str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;'). Vielleicht sollte jemand ein NPM-Paket dafür erstellen, z left-pad? 😆

    – Lionel Rowe

    10. September 2020 um 20:01 Uhr

Benutzer-Avatar
Erfan Safarpoor

Probe 1:

<pre>
  This text has
  been formatted using
  the HTML pre tag. The brower should
  display all white space
  as it was entered.
</pre>

Probe 2:

<pre>
  <code>
    My pre-formatted code
    here.
  </code>
</pre>

Probe 3: (Wenn Sie tatsächlich einen Codeblock “zitieren”, wäre das Markup)

<blockquote>
  <pre>
    <code>
        My pre-formatted "quoted" code here.
    </code>
  </pre>
</blockquote>

  • Die in der Antwort verwendeten Elemente gehen überhaupt nicht auf die Frage ein: Sie haben keinen Einfluss auf die Interpretation von „<“, das ein Tag beginnt.

    – Jukka K. Korpela

    24. April 2014 um 11:17 Uhr

  • developer.mozilla.org/en-US/docs/Web/HTML/Element/xmp sagt: “Verwenden Sie dieses Element nicht. Es ist seit HTML3.2 veraltet und wurde nicht konsistent implementiert. Es wurde vollständig aus der Sprache in HTML5 entfernt.”

    – Nick Reis

    1. August 2018 um 8:40 Uhr


  • Ich habe das gepostete CSS verwendet, danke, es hat viele Designprobleme behoben

    – Basheer AL-MOMANI

    31. August 2020 um 9:41 Uhr

Benutzer-Avatar
Konrad Rudolf

gibt es ein tag für HTML erst rendern, wenn Sie auf das schließende Tag klicken?

Nein, da ist nicht. In HTML selbst gibt es keine Möglichkeit, einige Zeichen zu maskieren:

  • & als &amp;
  • < als &lt;

(Es besteht übrigens keine Notwendigkeit zu entkommen > aber die Leute tun es oft aus Gründen der Symmetrie.)

Und natürlich sollten Sie den resultierenden, maskierten HTML-Code darin einschließen <pre><code>…</code></pre> um (a) Leerzeichen und Zeilenumbrüche beizubehalten und (b) es als Codeelement zu markieren.

Alle anderen Lösungen, wie das Umhüllen Ihres Codes in eine <textarea> oder die (veraltet) <xmp> Element, wird brechen.1

XHTML, das dem Browser als XML deklariert wird (über die HTTP Content-Type Header! — bloßes Setzen von a DOCTYPE ist nicht genug) könnte alternativ einen CDATA-Abschnitt verwenden:

<![CDATA[Your <code> here]]>

Aber das funktioniert nur in XML, nicht in HTML, und selbst das ist keine narrensichere Lösung, da der Code das schließende Trennzeichen nicht enthalten darf ]]>. Also ist selbst in XML die einfachste und robusteste Lösung das Maskieren.


1 Fallbeispiel:

textarea {border: none; width: 100%;}
<textarea readonly="readonly">
  <p>Computer <textarea>says</textarea> <span>no.</span>
</textarea>

<xmp>
  Computer <xmp>says</xmp> <span>no.</span>
</xmp>

  • Hübsch. Das ist also Teil des HTML-Standards? Oder ist es tiefer, wie ein Teil des XML-Standards?

    – aiobe

    12. Mai 2010 um 15:50 Uhr


  • In HTML wird dies ` here]]>` rendern

    – Dolph

    12. Mai 2010 um 16:03 Uhr

  • Ja, das ist eine gute Antwort, aber vergessen Sie nicht zu ersetzen > mit &gt;

    – Alan

    28. Juli 2016 um 13:13 Uhr


  • @Alan Ich würde das auch tun, aber das ist es eigentlich nicht notwendig: nur < und & müssen ersetzt werden, nicht entgangen > ist innerhalb von HTML gültig.

    – Konrad Rudolf

    28. Juli 2016 um 13:25 Uhr


  • @SamWatkins Aber deine Lösung ist nicht einfacher als bei mir. Du hast dich gerade verändert was muss entkommen, und Ihre Lösung ist hacky, wie Sie zugeben. Es gibt buchstäblich keinen Vorteil, es richtig zu machen. Dies ist ein gelöstes Problem mit einer korrekten Lösung. Keine Notwendigkeit für Hacks, es sei denn, Ihr gesamtes Setup ist hackig.

    – Konrad Rudolf

    3. Juni 2020 um 8:28 Uhr


Benutzer-Avatar
Krunal

Eine Art naive Methode zum Anzeigen von Code besteht darin, ihn in einen Textbereich aufzunehmen und ein deaktiviertes Attribut hinzuzufügen, sodass er nicht bearbeitet werden kann.

<textarea disabled> code </textarea>

Ich hoffe, das hilft jemandem, der nach einer einfachen Möglichkeit sucht, Dinge zu erledigen.

Benutzer-Avatar
s_hewitt

Veraltetfunktioniert aber in FF3 und IE8.

<xmp>
   <b>bold</b><ul><li>list item</li></ul>
</xmp>

Empfohlen:

<pre><code>
    code here, escape it yourself.
</code></pre>

Benutzer-Avatar
barnameha

ich benutzte <xmp> genau wie dieser :
http://jsfiddle.net/barnameha/hF985/1/

Benutzer-Avatar
Erich Leschinski

Das Abgelehnte <xmp> tag macht das im Wesentlichen, ist aber nicht mehr Teil der XHTML-Spezifikation. Es sollte aber trotzdem in allen aktuellen Browsern funktionieren.

Hier ist eine andere Idee, ein Hack/Salontrick, Sie könnten den Code so in ein Textfeld einfügen:

<textarea disabled="true" style="border: none;background-color:white;">
    <p>test</p>
</textarea>

Das Einfügen von spitzen Klammern und solchem ​​Code in einen Textbereich ist ungültiges HTML und führt zu undefiniertem Verhalten in verschiedenen Browsern. Im Internet Explorer wird das HTML interpretiert, während Mozilla, Chrome und Safari es uninterpretiert lassen.

Wenn Sie möchten, dass es nicht bearbeitbar ist und anders aussieht, können Sie es einfach mit CSS gestalten. Das einzige Problem wäre, dass Browser diesen kleinen Ziehgriff in der unteren rechten Ecke hinzufügen, um die Größe des Felds zu ändern. Oder versuchen Sie stattdessen, stattdessen ein Eingabe-Tag zu verwenden.

Der richtige Weg, Code in Ihr Textfeld einzufügen, ist die Verwendung einer serverseitigen Sprache wie beispielsweise dieses PHP:

<textarea disabled="true" style="border: none;background-color:white;">
    <?php echo '<p>test</p>'; ?>
</textarea>

Dann umgeht es den HTML-Interpreter und fügt uninterpretierten Text konsistent über alle Browser in den Textbereich ein.

Abgesehen davon besteht die einzige Möglichkeit darin, den Code selbst zu maskieren, wenn statisches HTML verwendet wird, oder serverseitige Methoden wie HtmlEncode () von .NET zu verwenden, wenn eine solche Technologie verwendet wird.

  • Das ist eine schreckliche Idee. Was wäre, wenn dynamisches HTML angezeigt würde und jemand Folgendes tun würde?