Konvertieren Sie Sonderzeichen in Javascript in HTML

121

Weiß jemand, wie man Sonderzeichen in HTMLin konvertiert?Javascript ?

Beispiel:

  • &(kaufmännisches Und) wird &amp.
  • "(doppeltes Anführungszeichen) wird, &quotwenn ENT_NOQUOTESnicht gesetzt ist.
  • '(einfaches Anführungszeichen) wird &#039nur, wenn ENT_QUOTESgesetzt ist.
  • <(weniger als) wird &lt.
  • >(größer als) wird &gt.
Jin Yong
quelle
Sie können diese Bibliothek verwenden: npmjs.com/package/utf8
Camilo Ortegón

Antworten:

76

Sie benötigen eine Funktion, die so etwas wie

return mystring.replace(/&/g, "&amp;").replace(/>/g, "&gt;").replace(/</g, "&lt;").replace(/"/g, "&quot;");

Berücksichtigen Sie jedoch Ihren Wunsch nach einem unterschiedlichen Umgang mit einfachen / doppelten Anführungszeichen.

Steven
quelle
Was macht der Schrägstrich g?
JohnnyBizzle
5
@JohnnyBizzle bedeutet /gin einem regulären Ausdruck "global". Einfach ausgedrückt, werden alle Vorkommen der Zeichenfolge ersetzt. Ohne würde /gnur das erste Match ersetzt werden.
Kevin Gimbel
207

Meiner Meinung nach ist es am besten, die integrierte HTML-Escape-Funktion des Browsers zu verwenden, um viele Fälle zu behandeln. Erstellen Sie dazu einfach ein Element im DOM-Baum und setzen Sie innerTextdas Element auf Ihre Zeichenfolge. Rufen Sie dann innerHTMLdas Element ab. Der Browser gibt eine HTML-codierte Zeichenfolge zurück.

function HtmlEncode(s)
{
  var el = document.createElement("div");
  el.innerText = el.textContent = s;
  s = el.innerHTML;
  return s;
}

Testlauf:

alert(HtmlEncode('&;\'><"'));

Ausgabe:

&amp;;'&gt;&lt;"

Diese Methode zum Escapen von HTML wird auch von der Prototype JS-Bibliothek verwendet, unterscheidet sich jedoch von dem vereinfachten Beispiel, das ich gegeben habe.

Hinweis: Sie müssen Anführungszeichen (doppelt und einfach) weiterhin selbst umgehen. Sie können jede der von anderen hier beschriebenen Methoden verwenden.

Cerebrus
quelle
3
Beachten Sie, dass dies delete elhier ein Fehler ist. perfektionskills.com/understanding-delete
gblazex
Das tut nichts für mich, wenn ich es versuche. Ich bekomme die Charaktere unverändert zurück.
Moss
1
Entschuldigung, ich habe mit ungeraden Zeichen getestet, und Chrome ist hinterhältig und zeigt Ihnen nicht die echte HTML-Ausgabe an, Firebug jedoch (tatsächlich wurde eine HTML-Entität für das Copyright-Symbol angezeigt, wenn die generierte Quelle es nicht codiert). Dies funktioniert gut <>&, ist aber nicht so umfassend wie die Lösungen von Neotropic oder KooiInc.
Moss
20
mit jQuery,output = $('<div>').text(input).html()
Drache
6
Beide Methoden konvertieren nicht in & apos; und "in" So kann es immer noch für XSS-Angriffe verwendet werden.
Jemand
32

Diese generische Funktion codiert jedes nicht alphabetische Zeichen in seinen HTML-Code (numerisch):

function HTMLEncode(str) {
    var i = str.length,
        aRet = [];

    while (i--) {
        var iC = str[i].charCodeAt();
        if (iC < 65 || iC > 127 || (iC>90 && iC<97)) {
            aRet[i] = '&#'+iC+';';
        } else {
            aRet[i] = str[i];
        }
    }
    return aRet.join('');
}
KooiInc
quelle
Das klingt wirklich klug, aber ich kann es nur dazu bringen, die Grundlagen zu konvertieren:<>&
Moss
nvm. Es läuft in einer Konsole in Ordnung, aber wenn Sie in den Browser ausgeben, sieht es so aus, als hätte es nichts konvertiert. Was ist damit los?
Moss
@Moss: Der Browser rendert die htmlencodierten Zeichen in die Zeichen, die sie darstellen. Der Vorteil von HTML-codierten Zeichen besteht darin, dass ein Browser nicht über die Übersetzung von (z. B.) diakritischen Zeichen raten muss und diese Zeichen daher immer so rendert, wie sie gerendert werden sollten.
KooiInc
Sie können dies ändern, um den Array-ähnlichen Zugriff von str zu entfernen. IE7 und niedriger unterstützen das nicht, und Sie können charCodeAt genauso einfach direkt von str mit i aufrufen wie das Argument. var iC = str.charCodeAt(i)
Chase
Dieser Code erzeugt nicht den richtigen HTML-Entitätswert für das Zeichen ±, der & # 177; aber es kehrt zurück & # 65533; Das ist ein unbekanntes Zeichen .
Paul
21

Von Mozilla ...

Beachten Sie, dass charCodeAt immer einen Wert zurückgibt, der kleiner als 65.536 ist. Dies liegt daran, dass die höheren Codepunkte durch ein Paar (niedrigerwertiger) "Ersatz" -Pseudozeichen dargestellt werden, die verwendet werden, um das reale Zeichen zu umfassen. Aus diesem Grund ist es erforderlich, nicht nur charCodeAt (i), sondern auch charCodeAt (i + 1) abzurufen, um das vollständige Zeichen für einzelne Zeichen mit einem Wert von 65.536 und höher zu untersuchen oder zu reproduzieren / Wiedergabe einer Zeichenfolge mit zwei> Buchstaben).

Die beste Lösung

/**
 * (c) 2012 Steven Levithan <http://slevithan.com/>
 * MIT license
 */
if (!String.prototype.codePointAt) {
    String.prototype.codePointAt = function (pos) {
        pos = isNaN(pos) ? 0 : pos;
        var str = String(this),
            code = str.charCodeAt(pos),
            next = str.charCodeAt(pos + 1);
        // If a surrogate pair
        if (0xD800 <= code && code <= 0xDBFF && 0xDC00 <= next && next <= 0xDFFF) {
            return ((code - 0xD800) * 0x400) + (next - 0xDC00) + 0x10000;
        }
        return code;
    };
}

/**
 * Encodes special html characters
 * @param string
 * @return {*}
 */
function html_encode(string) {
    var ret_val = '';
    for (var i = 0; i < string.length; i++) { 
        if (string.codePointAt(i) > 127) {
            ret_val += '&#' + string.codePointAt(i) + ';';
        } else {
            ret_val += string.charAt(i);
        }
    }
    return ret_val;
}

Anwendungsbeispiel:

html_encode("✈");
user1949536
quelle
21

Erstellen Sie eine Funktion, die einen String verwendet replace

function convert(str)
{
  str = str.replace(/&/g, "&amp;");
  str = str.replace(/>/g, "&gt;");
  str = str.replace(/</g, "&lt;");
  str = str.replace(/"/g, "&quot;");
  str = str.replace(/'/g, "&#039;");
  return str;
}
Matt Hanson
quelle
Ich hatte ein Problem mit nur einfachen Anführungszeichen (') und doppelten Anführungszeichen (") in meinem Eingabewert, die in HTML angezeigt werden sollten. Das Skript wurde unterbrochen, wenn der Benutzer es hinzufügte.
Dharam Mali
13

Verwenden Sie diese Funktion für diejenigen, die einen ganzzahligen Zeichencode wie in einer Zeichenfolge dekodieren möchten &#xxx;:

function decodeHtmlCharCodes(str) { 
  return str.replace(/(&#(\d+);)/g, function(match, capture, charCode) {
    return String.fromCharCode(charCode);
  });
}

// Will output "The show that gained int’l reputation’!"
console.log(decodeHtmlCharCodes('The show that gained int&#8217;l reputation&#8217;!'));

ES6

const decodeHtmlCharCodes = str => 
  str.replace(/(&#(\d+);)/g, (match, capture, charCode) => 
    String.fromCharCode(charCode));

// Will output "The show that gained int’l reputation’!"
console.log(decodeHtmlCharCodes('The show that gained int&#8217;l reputation&#8217;!'));

Christos Lytras
quelle
3
Dies sollte die akzeptierte Antwort sein, da dies alles entschlüsselt.
Quesofat
Dies ist die Antwort, nach der ich gesucht habe. Vielen Dank.
Dzenis H.
8
function char_convert() {

    var chars = ["©","Û","®","ž","Ü","Ÿ","Ý","$","Þ","%","¡","ß","¢","à","£","á","À","¤","â","Á","¥","ã","Â","¦","ä","Ã","§","å","Ä","¨","æ","Å","©","ç","Æ","ª","è","Ç","«","é","È","¬","ê","É","­","ë","Ê","®","ì","Ë","¯","í","Ì","°","î","Í","±","ï","Î","²","ð","Ï","³","ñ","Ð","´","ò","Ñ","µ","ó","Õ","¶","ô","Ö","·","õ","Ø","¸","ö","Ù","¹","÷","Ú","º","ø","Û","»","ù","Ü","@","¼","ú","Ý","½","û","Þ","€","¾","ü","ß","¿","ý","à","‚","À","þ","á","ƒ","Á","ÿ","å","„","Â","æ","…","Ã","ç","†","Ä","è","‡","Å","é","ˆ","Æ","ê","‰","Ç","ë","Š","È","ì","‹","É","í","Œ","Ê","î","Ë","ï","Ž","Ì","ð","Í","ñ","Î","ò","‘","Ï","ó","’","Ð","ô","“","Ñ","õ","”","Ò","ö","•","Ó","ø","–","Ô","ù","—","Õ","ú","˜","Ö","û","™","×","ý","š","Ø","þ","›","Ù","ÿ","œ","Ú"]; 
    var codes = ["&copy;","&#219;","&reg;","&#158;","&#220;","&#159;","&#221;","&#36;","&#222;","&#37;","&#161;","&#223;","&#162;","&#224;","&#163;","&#225;","&Agrave;","&#164;","&#226;","&Aacute;","&#165;","&#227;","&Acirc;","&#166;","&#228;","&Atilde;","&#167;","&#229;","&Auml;","&#168;","&#230;","&Aring;","&#169;","&#231;","&AElig;","&#170;","&#232;","&Ccedil;","&#171;","&#233;","&Egrave;","&#172;","&#234;","&Eacute;","&#173;","&#235;","&Ecirc;","&#174;","&#236;","&Euml;","&#175;","&#237;","&Igrave;","&#176;","&#238;","&Iacute;","&#177;","&#239;","&Icirc;","&#178;","&#240;","&Iuml;","&#179;","&#241;","&ETH;","&#180;","&#242;","&Ntilde;","&#181;","&#243;","&Otilde;","&#182;","&#244;","&Ouml;","&#183;","&#245;","&Oslash;","&#184;","&#246;","&Ugrave;","&#185;","&#247;","&Uacute;","&#186;","&#248;","&Ucirc;","&#187;","&#249;","&Uuml;","&#64;","&#188;","&#250;","&Yacute;","&#189;","&#251;","&THORN;","&#128;","&#190;","&#252","&szlig;","&#191;","&#253;","&agrave;","&#130;","&#192;","&#254;","&aacute;","&#131;","&#193;","&#255;","&aring;","&#132;","&#194;","&aelig;","&#133;","&#195;","&ccedil;","&#134;","&#196;","&egrave;","&#135;","&#197;","&eacute;","&#136;","&#198;","&ecirc;","&#137;","&#199;","&euml;","&#138;","&#200;","&igrave;","&#139;","&#201;","&iacute;","&#140;","&#202;","&icirc;","&#203;","&iuml;","&#142;","&#204;","&eth;","&#205;","&ntilde;","&#206;","&ograve;","&#145;","&#207;","&oacute;","&#146;","&#208;","&ocirc;","&#147;","&#209;","&otilde;","&#148;","&#210;","&ouml;","&#149;","&#211;","&oslash;","&#150;","&#212;","&ugrave;","&#151;","&#213;","&uacute;","&#152;","&#214;","&ucirc;","&#153;","&#215;","&yacute;","&#154;","&#216;","&thorn;","&#155;","&#217;","&yuml;","&#156;","&#218;"];

    for(x=0; x<chars.length; x++){
        for (i=0; i<arguments.length; i++){
            arguments[i].value = arguments[i].value.replace(chars[x], codes[x]);
        }
    }
 }

char_convert(this);
Neotrop
quelle
1
Dies funktioniert hervorragend. Aber aus irgendeinem Grund schlägt es fehl, wenn es mit einer JQuery-Funktionalität gemischt wird. Manchmal konvertiert man einige oder nur ein paar. Aber im Allgemeinen funktioniert großartig. onBlur = "char_convert (this);"
Neotropic
Äh, ich erhalte die Fehlermeldung "Uncaught TypeError: Die Methode 'replace' von undefined kann nicht aufgerufen werden" in Chrome und "arguments [i] .value is undefined" in Firebug.
Moss
Das Einfügen all dieser Sonderzeichen in ein solches Array ist völlig sinnlos. siehe andere Antworten.
Gavin
Die beste Lösung für mich, die einzige, die í in & iacute; beispielsweise.
Edhowler
Wie bekommst du diese Zeichen von deiner Tastatur? Ich weiß, dass dies eine dumme Frage ist ... zum Beispiel in OS X
PositiveGuy
7

Wie dragonam saubersten erwähnt wurde , ist dies mit jQuery:

function HtmlEncode(s) {
    return $('<div>').text(s).html();
}

function HtmlDecode(s) {
    return $('<div>').html(s).text();
}
Serj Sagan
quelle
Interessant, aber wenn Ihre Zeichenfolge ein Leerzeichen enthält, ändert dies nichts daran. Ein besserer Weg ist die Verwendung von encodeURI (yourString).
Mike Gledhill
6
Funktion ConvChar (str) {
  c = {'<': '& lt;', '>': '& gt;', '&': '& amp;', '"': '& quot;'," '":' & # 039; ',
       '#': '& # 035;' };
  return str.replace (/ [<&> '"#] / g, Funktion (en) {return c [s];});
}}

alert (ConvChar ('<- "- & -" -> - <- \' - # - \ '->'));

Ergebnis:

& lt; - & quot; - & amp; - & quot; - & gt; - & lt; - & # 039; - & # 035; - & # 039; - & gt;

Im Testbereich:

<- "- & -" -> - <-'- # -'->

Wenn Sie nur ein paar Zeichen in langem Code ändern ...

Benutzer262419
quelle
4

In einem PRETag - und in den meisten anderen HTML-Tags - wird durch einfachen Text für eine Batchdatei, die die Ausgabeumleitungszeichen (<und>) verwendet, der HTML-Code unterbrochen. Hier ist jedoch mein Tipp : Alles, was in einem TEXTAREAElement enthalten ist, unterbricht den HTML-Code nicht HTML, hauptsächlich, weil wir uns in einem Steuerelement befinden, das vom Betriebssystem instanziiert und verwaltet wird, und daher sein Inhalt nicht von der HTML-Engine analysiert wird.

Angenommen, ich möchte die Syntax meiner Batchdatei mit Javascript hervorheben. Ich füge den Code einfach in einen Textbereich ein, ohne mir Gedanken über die HTML-reservierten Zeichen zu machen, und lasse das Skript das verarbeiteninnerHTML Eigenschaft des Textbereichs verarbeiten, der den Text auswertet, wobei die reservierten HTML-Zeichen durch die entsprechenden ISO-8859-1-Entitäten ersetzt werden.

Browser entkommen Sonderzeichen automatisch, wenn Sie die innerHTML(und outerHTML) -Eigenschaft eines Elements abrufen . Die Verwendung eines Textbereichs (und wer weiß, möglicherweise eine Eingabe vom Typ Text) erspart Ihnen nur die Konvertierung (manuell oder über Code).

Ich benutze diesen Trick, um meinen Syntax-Textmarker zu testen. Wenn ich mit dem Erstellen und Testen fertig bin, verstecke ich den Textbereich einfach vor der Ansicht.

hector-j-rivas
quelle
3

eine Problemumgehung:

var temp = $("div").text("<");
var afterEscape = temp.html(); // afterEscape == "&lt;"
Keshin
quelle
2
var swapCodes   = new Array(8211, 8212, 8216, 8217, 8220, 8221, 8226, 8230, 8482, 169, 61558, 8226, 61607);
var swapStrings = new Array("--", "--", "'",  "'",  '"',  '"',  "*",  "...", "&trade;", "&copy;", "&bull;", "&bull;", "&bull;");

var TextCheck = {
    doCWBind:function(div){
        $(div).bind({
            bind:function(){
                TextCheck.cleanWord(div);
            },
            focus:function(){
                TextCheck.cleanWord(div);
            },
            paste:function(){
                TextCheck.cleanWord(div);
            }
        }); 
    },
    cleanWord:function(div){
        var output = $(div).val();
        for (i = 0; i < swapCodes.length; i++) {
            var swapper = new RegExp("\\u" + swapCodes[i].toString(16), "g");
            output = output.replace(swapper, swapStrings[i]);
        }
        $(div).val(output);
    }
}

Eine andere, die wir jetzt verwenden, funktioniert. Eines oben hat es stattdessen ein Skript aufgerufen und gibt den konvertierten Code zurück. Nur gut für kleine Textbereiche (dh nicht vollständig für Artikel / Blog usw.)


Für oben. Funktioniert mit den meisten Zeichen.

var swapCodes   = new Array(8211, 8212, 8216, 8217, 8220, 8221, 8226, 8230, 8482, 61558, 8226, 61607,161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 338, 339, 352, 353, 376, 402);
var swapStrings = new Array("--", "--", "'",  "'",  '"',  '"',  "*",  "...", "&trade;", "&bull;", "&bull;", "&bull;", "&iexcl;", "&cent;", "&pound;", "&curren;", "&yen;", "&brvbar;", "&sect;", "&uml;", "&copy;", "&ordf;", "&laquo;", "&not;", "&shy;", "&reg;", "&macr;", "&deg;", "&plusmn;", "&sup2;", "&sup3;", "&acute;", "&micro;", "&para;", "&middot;", "&cedil;", "&sup1;", "&ordm;", "&raquo;", "&frac14;", "&frac12;", "&frac34;", "&iquest;", "&Agrave;", "&Aacute;", "&Acirc;", "&Atilde;", "&Auml;", "&Aring;", "&AElig;", "&Ccedil;", "&Egrave;", "&Eacute;", "&Ecirc;", "&Euml;", "&Igrave;", "&Iacute;", "&Icirc;", "&Iuml;", "&ETH;", "&Ntilde;", "&Ograve;", "&Oacute;", "&Ocirc;", "&Otilde;", "&Ouml;", "&times;", "&Oslash;", "&Ugrave;", "&Uacute;", "&Ucirc;", "&Uuml;", "&Yacute;", "&THORN;", "&szlig;", "&agrave;", "&aacute;", "&acirc;", "&atilde;", "&auml;", "&aring;", "&aelig;", "&ccedil;", "&egrave;", "&eacute;", "&ecirc;", "&euml;", "&igrave;", "&iacute;", "&icirc;", "&iuml;", "&eth;", "&ntilde;", "&ograve;", "&oacute;", "&ocirc;", "&otilde;", "&ouml;", "&divide;", "&oslash;", "&ugrave;", "&uacute;", "&ucirc;", "&uuml;", "&yacute;", "&thorn;", "&yuml;", "&#338;", "&#339;", "&#352;", "&#353;", "&#376;", "&#402;");

Ich erstelle eine Javascript-Datei, die viele Funktionen hat, einschließlich der oben genannten. http://www.neotropicsolutions.com/JSChars.zip

Alle benötigten Dateien sind enthalten. Ich habe jQuery 1.4.4 hinzugefügt. Einfach, weil ich Probleme in anderen Versionen gesehen habe, sie aber noch nicht ausprobiert habe.

Requires: jQuery & jQuery Impromptu from: http://trentrichardson.com/Impromptu/index.php

1. Word Count
2. Character Conversion
3. Checks to ensure this is not passed: "notsomeverylongstringmissingspaces"
4. Checks to make sure ALL IS NOT ALL UPPERCASE.
5. Strip HTML

    // Word Counter
    $.getScript('js/characters.js',function(){
            $('#adtxt').bind("keyup click blur focus change paste",
                function(event){
                    TextCheck.wordCount(30, "#adtxt", "#adtxt_count", event);
            });
            $('#adtxt').blur(
                function(event){
                    TextCheck.check_length('#adtxt'); // unsures properly spaces-not one long word
                    TextCheck.doCWBind('#adtxt');// char conversion
            });

            TextCheck.wordCount(30, "#adtxt", "#adtxt_count", false);
        });

    //HTML
    <textarea name="adtxt" id="adtxt" rows="10" cols="70" class="wordCount"></textarea>
<div id="adtxt_count" class="clear"></div>

    // Just Character Conversions:
    TextCheck.doCWBind('#myfield');

    // Run through form fields in a form for case checking.
    // Alerts user when field is blur'd.
    var labels = new Array("Brief Description","Website URL","Contact Name","Website","Email","Linkback URL");
    var checking = new Array("descr","title","fname","website","email","linkback");
    TextCheck.check_it(checking,labels);

    // Extra security to check again, make sure form is not submitted
    var pass = TextCheck.validate(checking,labels);
    if(pass){
        //do form actions
    }


    //Strip HTML
    <textarea name="adtxt" id="adtxt" rows="10" cols="70" onblur="TextCheck.stripHTML(this);"></textarea>
Neotrop
quelle
2
 <!doctype html>
    <html lang="en">
    <head>
      <meta charset="utf-8">
      <title>html</title>  
      <script>
      $(function() {   
      document.getElementById('test').innerHTML = "&amp;";
      });

      </script>
    </head>
    <body>
    <div id="test"></div>
    </body>
    </html>

Sie können Sonderzeichen einfach mit dem obigen Code in HTML konvertieren.

Sanman
quelle
2

Hier ist eine gute Bibliothek, die ich in diesem Zusammenhang als sehr nützlich empfunden habe.

https://github.com/mathiasbynens/he

Laut dem Autor:

Es unterstützt alle standardisierten benannten Zeichenreferenzen gemäß HTML, behandelt mehrdeutige kaufmännische Und-Zeichen und andere Randfälle wie ein Browser, verfügt über eine umfangreiche Testsuite und verarbeitet - im Gegensatz zu vielen anderen JavaScript-Lösungen - astrale Unicode-Symbole einwandfrei

Dipesh KC
quelle
Dieses Tool github.com/mathiasbynens/he für mathias ist sehr gut und hat auch Online-Spielplatz
Mohamed Hussain
1

Hier sind einige Methoden, die ich ohne Jquery verwende:

Sie können jedes Zeichen in Ihrer Zeichenfolge codieren :

function encode(e){return e.replace(/[^]/g,function(e){return"&#"+e.charCodeAt(0)+";"})}

Oder zielen Sie einfach auf die wichtigsten sicheren Codierungszeichen ab, um die Sie sich Sorgen machen müssen (&, Inebreaks, <,>, "und '), wie:

function encode(r){
return r.replace(/[\x26\x0A\<>'"]/g,function(r){return"&#"+r.charCodeAt(0)+";"})
}

test.value=encode('How to encode\nonly html tags &<>\'" nice & fast!');

/*************
* \x26 is &ampersand (it has to be first),
* \x0A is newline,
*************/
<textarea id=test rows="9" cols="55">www.WHAK.com</textarea>

Dave Brown
quelle
0
function escape (text)
{
  return text.replace(/[<>\&\"\']/g, function(c) {
    return '&#' + c.charCodeAt(0) + ';';
  });
}

alert(escape("<>&'\""));
Chris
quelle
0

Dies beantwortet Ihre Frage nicht direkt. Wenn Sie jedoch innerHTMLText in ein Element schreiben und dabei auf Codierungsprobleme stoßen, verwenden Sie einfach textContent:

var s = "Foo 'bar' baz <qux>";

var element = document.getElementById('foo');
element.textContent = s;

// <div id="foo">Foo 'bar' baz <qux></div>
Simone
quelle
0

Wir können Javascript DOMParserfür die Konvertierung von Sonderzeichen verwenden.

const parser = new DOMParser();
const convertedValue = (parser.parseFromString("&#039 &amp &#039 &lt &gt", "application/xml").body.innerText;
Ankit Arya
quelle
0

Im Folgenden finden Sie die einfache Funktion zum Codieren von XML-Escapezeichen in JS

Encoder.htmlEncode (unsafeText);

user1211004
quelle
0

Sie können das Problem beheben, indem Sie die Funktion .text () durch .html () ersetzen. Es funktioniert für mich.

user3040433
quelle
-1
<html>
<body>
<script type="text/javascript">
var str= "&\"'<>";
alert('B4 Change:\n' + str);
str= str.replace(/\&/g,'&amp;');
str= str.replace(/</g,'&lt;');
str= str.replace(/>/g,'&gt;');
str= str.replace(/\"/g,'&quot;');
str= str.replace(/\'/g,'&#039;');
alert('After change:\n' + str);
</script>
</body>
</html>      

Verwenden Sie dies zum Testen: http://www.w3schools.com/js/tryit.asp?filename=tryjs_text


quelle
-1

Ja, aber wenn Sie die resultierende Zeichenfolge irgendwo einfügen müssen, ohne dass sie zurückkonvertiert wird, müssen Sie Folgendes tun:

str.replace(/'/g,"&amp;amp;#39;"); // and so on
Graham
quelle
-4

Verwenden Sie die JavaScript-Funktion Escape () , mit der Sie Zeichenfolgen codieren können.

z.B,

escape("yourString");
Benaja
quelle
1
Codieren Sie für die Eingabe einer URL, die nicht für HTML bestimmt ist (und die Funktion ist ohnehin veraltet, da sie für Unicode fehlerhaft ist).
Quentin
-4
public static string HtmlEncode (string text)
{
    string result;
    using (StringWriter sw = new StringWriter())
    {
        var x = new HtmlTextWriter(sw);
        x.WriteEncodedText(text);
        result = sw.ToString();
    }
    return result;

}
Shahyad Sharghi
quelle
Ist diese Lösung überhaupt ein Javascript-Code? Weil es für mich wie JAVA oder C # aussieht.
Mr.TK
Dies ist kein Javascript.
Diego Fortes