Codieren Sie HTML-Entitäten in Javascript

94

Ich arbeite in einem CMS, mit dem Benutzer Inhalte eingeben können. Das Problem ist, dass beim Hinzufügen von Symbolen ®möglicherweise nicht alle Browser gut angezeigt werden. Ich möchte eine Liste von Symbolen erstellen, nach denen gesucht und dann in die entsprechende HTML-Entität konvertiert werden muss. Beispielsweise

® => ®
& => &
© => ©
™ =>™

Nach der Konvertierung muss es in ein <sup>Tag eingeschlossen werden, was Folgendes zur Folge hat:

® => <sup>&reg;</sup>

Weil eine bestimmte Schriftgröße und ein bestimmter Füllstil erforderlich sind:

sup { font-size: 0.6em; padding-top: 0.2em; }

Wäre das JavaScript so etwas?

var regs = document.querySelectorAll('®');
  for ( var i = 0, l = imgs.length; i < l; ++i ) {
  var [?] = regs[i];
  var [?] = document.createElement('sup');
  img.parentNode.insertBefore([?]);
  div.appendChild([?]);
}

Wo "[?]" Bedeutet, dass es etwas gibt, bei dem ich mir nicht sicher bin.

Weitere Details:

  • Ich möchte dies mit reinem JavaScript tun, nicht mit einer Bibliothek wie jQuery, danke.
  • Backend ist Ruby
  • Verwenden von RefineryCMS, das mit Ruby on Rails erstellt wurde
JGallardo
quelle
Was ist dein Backend? Wenn es PHP ist, gibt es Funktionen, die dies für Sie erledigen, und ich bin sicher, dass andere Sprachen sie auch haben. Auch Google: Developwithstyle.com/articles/2010/06/29/…
Chris Baker
5
Eine bessere Lösung könnte darin bestehen, UTF-8-codierten Text zu akzeptieren und auszugeben. Jeder heute verwendete Browser unterstützt UTF-8. Auf der HTML-Seite möchten Sie accept-charset="UTF-8"Ihrem <form>Tag hinzufügen . Auf dem Server möchten Sie sicherstellen, dass Ihre Ausgabe UTF-8-codiert ist und dass Ihr Webserver dem Browser dies über den Content-TypeHeader mitteilt . Siehe rentzsch.tumblr.com/post/9133498042/… Wenn Sie dies alles tun und ein Browser das Zeichen nicht korrekt anzeigt, macht das Ersetzen des Zeichens durch eine Entität keinen Unterschied.
Paul D. Waite
@ Chris arbeitet in einem CMS, das mit Ruby on Rails erstellt wurde.
JGallardo
Es ist falsch, ein Zeichen in clientseitigem JavaScript in eine HTML-Entitätsreferenz zu ändern, da clientseitiges JavaScript im DOM ausgeführt wird, in dem keine Entitäten vorhanden sind. Das Umschließen von "®" in supElemente verursacht tendenziell mehr Probleme, als es möglicherweise lösen könnte, da "®" in vielen Schriftarten klein und in tiefgestellter Position ist, sodass Sie es auf nicht erkennbar reduzieren würden.
Jukka K. Korpela
@ JukkaK.Korpela, wenn man bedenkt, dass ich ansprechen muss, dass einige HTML-Entitäten nicht richtig angezeigt werden, wie würden Sie das ansprechen? Das Einwickeln <sup>ist kein Problem, da ich die spezifischen Schriftarten getestet habe, die für die Blog-Beiträge verwendet werden, aber das ist ein guter Punkt, den Sie berücksichtigen sollten.
JGallardo

Antworten:

171

Sie können Regex verwenden, um jedes Zeichen in einem bestimmten Unicode-Bereich durch das entsprechende HTML-Entitätszeichen zu ersetzen. Der Code würde ungefähr so ​​aussehen:

var encodedStr = rawStr.replace(/[\u00A0-\u9999<>\&]/gim, function(i) {
   return '&#'+i.charCodeAt(0)+';';
});

Mit ihrem HTML - Entity - Äquivalente, die einfach ist - Dieser Code wird alle Zeichen im angegebenen Bereich (9999, sowie etzeichen, größer und kleiner als Unicode 00A0) ersetzen , &#nnn;wo nnnwerden den Unicode - Wert , den wir aus bekommen charCodeAt.

Sehen Sie es hier in Aktion: http://jsfiddle.net/E3EqX/13/ (In diesem Beispiel wird jQuery für die im Beispiel verwendeten Elementselektoren verwendet. Der Basiscode selbst verwendet oben nicht jQuery.)

Durch diese Konvertierungen werden nicht alle Probleme gelöst. Stellen Sie sicher, dass Sie die UTF8-Zeichencodierung verwenden. Stellen Sie sicher, dass Ihre Datenbank die Zeichenfolgen in UTF8 speichert. Sie immer noch können Fälle sehen , wo die Zeichen nicht korrekt angezeigt werden , abhängig von der Systemkonfiguration Schriftart und anderen Fragen aus Ihrer Kontrolle.

Dokumentation

Chris Baker
quelle
Vielen Dank für die jsfiddle. Also um dies umzusetzen. Ich kann dies einfach zu meiner .jsDatei hinzufügen und die anderen Dinge hinzufügen, die mit einem <sup>?
JGallardo
2
@JGallardo Ich habe das Beispiel ein wenig neu geschrieben, damit es das supTag (oder ein anderes Tag) hinzufügt , und es ist in einer Funktion enthalten: jsfiddle.net/E3EqX/4 . Um dies zu verwenden, müssen Sie die Funktion "encodeAndWrap" in Ihr Projekt kopieren.
Chris Baker
1
@ Chris danke für das nette Code-Snippet, obwohl es einen Fehler gibt: "[\ u00A0- \ u99999]" macht nicht das, was Sie erwarten, sondern ist gleich "[\ u00A0- \ u9999] | 9 "- dh. Das Zeichen "9" würde fälschlicherweise auch durch eine HTML-Entität ersetzt. Das können Sie auch in der Geige versuchen. Ich werde eine Lösung für die Antwort vorschlagen.
SB
@SB Danke für diesen Hinweis, ich muss sogar die endgültige Zustimmungsabstimmung abgeben :)
Chris Baker
1
Obwohl ich der Meinung bin, dass die Antwort von @mathias Bynens vollständiger ist, beträgt seine Lösung 84 KB, und das hat mich veranlasst, weiterhin nach einer Alternative zu suchen. Dies scheint in Ordnung zu sein, könnte man jedoch auch charCodes <65 und zwischen> 90 && <97 einschließen?
Florian Mertens
61

Die derzeit akzeptierte Antwort weist mehrere Probleme auf. Dieser Beitrag erklärt sie und bietet eine robustere Lösung. Die in dieser Antwort vorgeschlagene Lösung lautet:

var encodedStr = rawStr.replace(/[\u00A0-\u9999<>\&]/gim, function(i) {
  return '&#' + i.charCodeAt(0) + ';';
});

Das iFlag ist redundant, da kein Unicode-Symbol im Bereich von U + 00A0 bis U + 9999 eine Variante in Groß- / Kleinbuchstaben aufweist, die außerhalb desselben Bereichs liegt.

Die mFlagge ist redundant , weil ^oder $nicht in dem regulären Ausdruck verwendet werden.

Warum der Bereich U + 00A0 bis U + 9999? Es scheint willkürlich.

Verwenden Sie für eine Lösung, die alle außer sicheren und druckbaren ASCII-Symbolen in der Eingabe (einschließlich Astralsymbolen!) Korrekt codiert und alle benannten Zeichenreferenzen (nicht nur die in HTML4) implementiert, die Bibliothek he (Haftungsausschluss: Diese Bibliothek gehört mir) ). Aus seiner README:

er (für „HTML-Entitäten“) ist ein robuster HTML-Entitätscodierer / -decodierer, der in JavaScript geschrieben ist. Es unterstützt alle standardisierten Namen Zeichenreferenzen per HTML , Griffe mehrdeutig Et - Zeichen und andere Grenzfälle wie ein Browser würde , eine umfangreiche Testreihe hat, und - im Gegensatz zu vielen anderen JavaScript - Lösungen - er gerade fein Astral Unicode - Zeichen behandelt. Eine Online-Demo ist verfügbar.

Siehe auch diese relevante Antwort zum Stapelüberlauf .

Mathias Bynens
quelle
11
Auch die HE-Bibliothek ist ... 84KB! Autch ... Versuchen Sie, das auf einem Mobiltelefon über eine geringere Verbindung herunterzuladen. Irgendwo muss ein Kompromiss geschlossen werden.
Florian Mertens
1
@FlorianMertens Nach Verkleinerungs + gzip er ~ 24 KB ist. Das ist immer noch groß, aber am Ende des Tages, wenn Sie HTML-Entitäten korrekt dekodieren möchten, benötigen Sie alle Daten auf ihnen - daran führt kein Weg vorbei. Wenn Sie eine Möglichkeit finden, die Bibliothek zu verkleinern, ohne die Leistung zu beeinträchtigen, senden Sie bitte eine Pull-Anfrage.
Mathias Bynens
2
@ MathiasBynens, zweifellos ist Ihre Bibliothek gut, aber Sie können das Kommentarfeld verwenden, um das Problem in den akzeptierten Antworten hervorzuheben und bitte Ihre verbesserte Antwort im Codeblock
einzureichen
2
@drzaus Bilder können davonkommen, groß zu sein, weil sie viele Daten speichern und weniger komprimierte Daten schneller zu dekodieren sind. Der Programmcode ist jedoch unterschiedlich, sehr oft wird eine ganze Bibliothek hinzugefügt und es wird wenig davon Gebrauch gemacht. Der Code der Bibliotheken enthält manchmal mehr Zeilen als Ihr eigener Code! Außerdem werden sich nur wenige die Mühe machen, lib-Probleme zu finden / zu debuggen und Fehlerberichte zu senden (oder sogar die lib zu aktualisieren), sodass Speicherlecks oder andere Probleme in Software mit vielen libs mit ungeprüftem Code bestehen bleiben können. Wenn jemand nur HTML-unsichere Zeichen codieren / maskieren möchte, werden nur wenige Zeilen benötigt, nicht 80 KB.
Bryc
1
@MarcoKlein Ja, das erkläre ich in meinem Beitrag. Es ist in der Tat ein Problem, unter dem das fehlerhafte Code-Snippet leidet. Die Lösung, auf die ich hinweise, hat dieses Problem nicht. (Siehe "einschließlich Astralsymbole!")
Mathias Bynens
28

Ich hatte das gleiche Problem und erstellte zwei Funktionen, um Entitäten zu erstellen und sie wieder in normale Zeichen zu übersetzen. Die folgenden Methoden übersetzen beliebige Zeichenfolgen in HTML-Entitäten und zurück in den Zeichenfolgenprototyp

/**
 * Convert a string to HTML entities
 */
String.prototype.toHtmlEntities = function() {
    return this.replace(/./gm, function(s) {
        // return "&#" + s.charCodeAt(0) + ";";
        return (s.match(/[a-z0-9\s]+/i)) ? s : "&#" + s.charCodeAt(0) + ";";
    });
};

/**
 * Create string from HTML entities
 */
String.fromHtmlEntities = function(string) {
    return (string+"").replace(/&#\d+;/gm,function(s) {
        return String.fromCharCode(s.match(/\d+/gm)[0]);
    })
};

Sie können es dann wie folgt verwenden:

var str = "Test´†®¥¨©˙∫ø…ˆƒ∆÷∑™ƒ∆æø𣨠ƒ™en tést".toHtmlEntities();
console.log("Entities:", str);
console.log("String:", String.fromHtmlEntities(str));

Ausgabe in der Konsole:

Entities: &#68;&#105;&#116;&#32;&#105;&#115;&#32;&#101;&#180;&#8224;&#174;&#165;&#168;&#169;&#729;&#8747;&#248;&#8230;&#710;&#402;&#8710;&#247;&#8721;&#8482;&#402;&#8710;&#230;&#248;&#960;&#163;&#168;&#160;&#402;&#8482;&#101;&#110;&#32;&#116;&#163;&#101;&#233;&#115;&#116;
String: Dit is e´†®¥¨©˙∫ø…ˆƒ∆÷∑™ƒ∆æø𣨠ƒ™en t£eést 
ar34z
quelle
Diese Lösung funktioniert auch unter tvOS, sodass in allen Fällen gute Codierungsprobleme gelöst werden können.
Loretoparisi
4
Ist das nicht ein bisschen extrem? Sie konvertieren alles in HTML-Entitäten, sogar "sichere" Zeichen wie "abc", "123" ... sogar die Leerzeichen
AJPerez
1
Das ist eine schlechte Antwort. 50% + der Dokumente im Web enthalten hauptsächlich Latin1 mit einigen utf-8. Durch die Codierung sicherer Zeichen wird die Größe ohne Vorteil um 500% bis 600% erhöht.
HoldOffHunger
17

Wenn Sie ohne Bibliothek IE <9 nicht benötigen, können Sie ein HTML-Element erstellen und dessen Inhalt mit Node.textContent festlegen :

var str = "<this is not a tag>";
var p = document.createElement("p");
p.textContent = str;
var converted = p.innerHTML;

Hier ist ein Beispiel: https://jsfiddle.net/1erdhehv/

antoineMoPa
quelle
2
Warum nicht innerText anstelle von textContent verwenden?
Rick
15

Sie können dies verwenden.

var escapeChars = {
  '¢' : 'cent',
  '£' : 'pound',
  '¥' : 'yen',
  '€': 'euro',
  '©' :'copy',
  '®' : 'reg',
  '<' : 'lt',
  '>' : 'gt',
  '"' : 'quot',
  '&' : 'amp',
  '\'' : '#39'
};

var regexString = '[';
for(var key in escapeChars) {
  regexString += key;
}
regexString += ']';

var regex = new RegExp( regexString, 'g');

function escapeHTML(str) {
  return str.replace(regex, function(m) {
    return '&' + escapeChars[m] + ';';
  });
};

https://github.com/epeli/underscore.string/blob/master/escapeHTML.js

var htmlEntities = {
    nbsp: ' ',
    cent: '¢',
    pound: '£',
    yen: '¥',
    euro: '€',
    copy: '©',
    reg: '®',
    lt: '<',
    gt: '>',
    quot: '"',
    amp: '&',
    apos: '\''
};

function unescapeHTML(str) {
    return str.replace(/\&([^;]+);/g, function (entity, entityCode) {
        var match;

        if (entityCode in htmlEntities) {
            return htmlEntities[entityCode];
            /*eslint no-cond-assign: 0*/
        } else if (match = entityCode.match(/^#x([\da-fA-F]+)$/)) {
            return String.fromCharCode(parseInt(match[1], 16));
            /*eslint no-cond-assign: 0*/
        } else if (match = entityCode.match(/^#(\d+)$/)) {
            return String.fromCharCode(~~match[1]);
        } else {
            return entity;
        }
    });
};
takdeniz
quelle
3
Das manuelle Hinzufügen einer zufälligen Teilmenge codierbarer Zeichen kann zu Problemen für Sie und Ihre Kollegen führen. Es sollte eine einzige Autorität geben, für die Zeichen codiert werden sollen, wahrscheinlich der Browser oder eine bestimmte Bibliothek, die wahrscheinlich umfassend und gepflegt ist.
user234461
Toller Punkt, @ user234461. Wenn jemand diese einzige Autorität findet, würden fragende Köpfe (wie ich) es gerne wissen!
idungotnosn
8

Wenn Sie vermeiden möchten, HTML-Entitäten mehrmals zu codieren

function encodeHTML(str){
    return str.replace(/[\u00A0-\u9999<>&](?!#)/gim, function(i) {
      return '&#' + i.charCodeAt(0) + ';';
    });
}

function decodeHTML(str){
    return str.replace(/&#([0-9]{1,3});/gi, function(match, num) {
        return String.fromCharCode(parseInt(num));
    });
}

Beispiel

var text = "<a>Content</a>";

text = encodeHTML(text);
console.log("Encode 1 times: " + text);

// &#60;a&#62;Content&#60;/a&#62;

text = encodeHTML(text);
console.log("Encode 2 times: " + text);

// &#60;a&#62;Content&#60;/a&#62;

text = decodeHTML(text);
console.log("Decoded: " + text);

// <a>Content</a>
StefansArya
quelle
5

HTML Sonderzeichen & seine ESCAPE CODES

Reservierte Zeichen müssen durch HTML maskiert werden: Wir können ein Zeichen-Escape verwenden, um jedes Unicode-Zeichen [Beispiel: & - U + 00026] in HTML, XHTML oder XML nur mit ASCII-Zeichen darzustellen. Numerische Zeichenreferenzen [Beispiel : kaufmännisches Und (&) - &#38;] und benannte Zeichenreferenzen [Beispiel: &amp;] sind Typen von character escape used in markup.


Vordefinierte Entitäten

    Original Character     XML entity replacement    XML numeric replacement  
                  <                                    &lt;                                           &#60;                    
                  >                                     &gt;                                         &#62;                    
                  "                                     &quot;                                      &#34;                    
                  &                                   &amp;                                       &#38;                    
                   '                                    &apos;                                      &#39;                    

Um HTML-Tags als normales Formular in einer von uns verwendeten Webseite anzuzeigen <pre>, können <code>Tags oder Tags ausgeblendet werden. Escape-Zeichenfolge durch Ersetzen durch ein beliebiges Vorkommen des "&"Zeichens durch die Zeichenfolge "&amp;"und durch ein beliebiges Vorkommen des ">"Zeichens durch die Zeichenfolge "&gt;". Ex:stackoverflow post

function escapeCharEntities() {
    var map = {
        "&": "&amp;",
        "<": "&lt;",
        ">": "&gt;",
        "\"": "&quot;",
        "'": "&apos;"
    };
    return map;
}

var mapkeys = '', mapvalues = '';
var html = {
    encodeRex : function () {
        return  new RegExp(mapkeys, 'gm');
    }, 
    decodeRex : function () {
        return  new RegExp(mapvalues, 'gm');
    },
    encodeMap : JSON.parse( JSON.stringify( escapeCharEntities () ) ),
    decodeMap : JSON.parse( JSON.stringify( swapJsonKeyValues( escapeCharEntities () ) ) ),
    encode : function ( str ) {
        return str.replace(html.encodeRex(), function(m) { return html.encodeMap[m]; });
    },
    decode : function ( str ) {
        return str.replace(html.decodeRex(), function(m) { return html.decodeMap[m]; });
    }
};

function swapJsonKeyValues ( json ) {
    var count = Object.keys( json ).length;
    var obj = {};
    var keys = '[', val = '(', keysCount = 1;
    for(var key in json) {
        if ( json.hasOwnProperty( key ) ) {
            obj[ json[ key ] ] = key;
            keys += key;
            if( keysCount < count ) {
                val += json[ key ]+'|';
            } else {
                val += json[ key ];
            }
            keysCount++;
        }
    }
    keys += ']';    val  += ')';
    console.log( keys, ' == ', val);
    mapkeys = keys;
    mapvalues = val;
    return obj;
}

console.log('Encode: ', html.encode('<input type="password" name="password" value=""/>') ); 
console.log('Decode: ', html.decode(html.encode('<input type="password" name="password" value=""/>')) );

O/P:
Encode:  &lt;input type=&quot;password&quot; name=&quot;password&quot; value=&quot;&quot;/&gt;
Decode:  <input type="password" name="password" value=""/>
Yash
quelle
Dies ist ideal, um HTML-Quellcode im Json-Format in die Zeichenfolge iframe srcdoc einzufügen.
Nime Cloud
3
var htmlEntities = [
            {regex:/&/g,entity:'&amp;'},
            {regex:/>/g,entity:'&gt;'},
            {regex:/</g,entity:'&lt;'},
            {regex:/"/g,entity:'&quot;'},
            {regex:/á/g,entity:'&aacute;'},
            {regex:/é/g,entity:'&eacute;'},
            {regex:/í/g,entity:'&iacute;'},
            {regex:/ó/g,entity:'&oacute;'},
            {regex:/ú/g,entity:'&uacute;'}
        ];

total = <some string value>

for(v in htmlEntities){
    total = total.replace(htmlEntities[v].regex, htmlEntities[v].entity);
}

Eine Array-Lösung

Cesar De la Cruz
quelle
3
Bitte erläutern Sie, wie dies das Problem auf einzigartige Weise besser löst als oben. Auf den ersten Blick scheint diese Lösung langsamer zu sein, da sie die Zeichenfolge in mehreren Durchgängen anstatt in einem Durchgang ändert. Ich kann jedoch falsch sein. In jedem Fall müssen Sie Ihren Beitrag mit einer Erklärung sichern.
Jack Giffin
Es ist eine Alternative, Sie können Regex direkt aus dem Array verwenden ...: D
Cesar De la Cruz
Dies ist eine Regex für jedes Zeichen (für v in ....). Wenn Sie UTF-8 vollständig abdecken möchten, sind dies 65.000 reguläre Ausdrücke und 65.000 Ausführungszeilen.
HoldOffHunger
2
Ich bin nur daran interessiert, drei Zeichen in Entitäten umzuwandeln, daher ist diese Antwort in meinem Fall besser und ich bin froh, dass sie hier war
Drew,
2

Wenn Sie jQuery bereits verwenden, versuchen Sie es html().

$('<div>').text('<script>alert("gotcha!")</script>').html()
// "&lt;script&gt;alert("gotcha!")&lt;/script&gt;"

Ein speicherinterner Textknoten wird instanziiert und darauf html()aufgerufen.

Es ist hässlich, es verschwendet ein bisschen Speicher und ich habe keine Ahnung, ob es so gründlich ist wie die heBibliothek, aber wenn Sie jQuery bereits verwenden, ist dies möglicherweise eine Option für Sie.

Entnommen aus dem Blog-Beitrag Codieren Sie HTML-Entitäten mit jQuery von Felix Geisendörfer.

Jared Beck
quelle
3
Um zu vermeiden, dass ein Knoten jedes Mal instanziiert wird, können Sie den Knoten speichern var converter=$("<div>");und später wiederverwenden: html1=converter.text(text1).html(); html2=converter.text(text2).html();...
FrancescoMM
1

Manchmal möchten Sie einfach jedes Zeichen codieren ... Diese Funktion ersetzt "alles außer nichts" in regxp.

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

Dave Brown
quelle
1
Ersetzen Sie die ^durch a ., um Emojis zu erhalten : function encode(e){return e.replace(/[.]/g,function(e){return"&#"+e.charCodeAt(0)+";"})}.
Schweizer Herr
0
replaceHtmlEntities(text) {
  var tagsToReplace = {
    '&amp;': '&',
    '&lt;': '<',
    '&gt;': '>',
  };
  var newtext = text;
  for (var tag in tagsToReplace) {
    if (Reflect.apply({}.hasOwnProperty, this, [tagsToReplace, tag])) {
      var regex = new RegExp(tag, 'g');
      newtext = newtext.replace(regex, tagsToReplace[tag]);
    }
  }
  return newtext;
}
Prasath Mani
quelle
0

<!DOCTYPE html>
<html>
<style>
button {
backround: #ccc;
padding: 14px;
width: 400px;
font-size: 32px;
}
#demo {
font-size: 20px;
font-family: Arial;
font-weight: bold;
}
</style>
<body>

<p>Click the button to decode.</p>

<button onclick="entitycode()">Html Code</button>

<p id="demo"></p>


<script>
function entitycode() {
  var uri = "quotation  = ark __ &apos; = apostrophe  __ &amp; = ampersand __ &lt; = less-than __ &gt; = greater-than __ 	non- = reaking space __ &iexcl; = inverted exclamation mark __ &cent; = cent __ &pound; = pound __ &curren; = currency __ &yen; = yen __ &brvbar; = broken vertical bar __ &sect; = section __ &uml; = spacing diaeresis __ &copy; = copyright __ &ordf; = feminine ordinal indicator __ &laquo; = angle quotation mark (left) __ &not; = negation __ &shy; = soft hyphen __ &reg; = registered trademark __ &macr; = spacing macron __ &deg; = degree __ &plusmn; = plus-or-minus  __ &sup2; = superscript 2 __ &sup3; = superscript 3 __ &acute; = spacing acute __ &micro; = micro __ &para; = paragraph __ &middot; = middle dot __ &cedil; = spacing cedilla __ &sup1; = superscript 1 __ &ordm; = masculine ordinal indicator __ &raquo; = angle quotation mark (right) __ &frac14; = fraction 1/4 __ &frac12; = fraction 1/2 __ &frac34; = fraction 3/4 __ &iquest; = inverted question mark __ &times; = multiplication __ &divide; = division __ &Agrave; = capital a, grave accent __ &Aacute; = capital a, acute accent __ &Acirc; = capital a, circumflex accent __ &Atilde; = capital a, tilde __ &Auml; = capital a, umlaut mark __ &Aring; = capital a, ring __ &AElig; = capital ae __ &Ccedil; = capital c, cedilla __ &Egrave; = capital e, grave accent __ &Eacute; = capital e, acute accent __ &Ecirc; = capital e, circumflex accent __ &Euml; = capital e, umlaut mark __ &Igrave; = capital i, grave accent __ &Iacute; = capital i, acute accent __ &Icirc; = capital i, circumflex accent __ &Iuml; = capital i, umlaut mark __ &ETH; = capital eth, Icelandic __ &Ntilde; = capital n, tilde __ &Ograve; = capital o, grave accent __ &Oacute; = capital o, acute accent __ &Ocirc; = capital o, circumflex accent __ &Otilde; = capital o, tilde __ &Ouml; = capital o, umlaut mark __ &Oslash; = capital o, slash __ &Ugrave; = capital u, grave accent __ &Uacute; = capital u, acute accent __ &Ucirc; = capital u, circumflex accent __ &Uuml; = capital u, umlaut mark __ &Yacute; = capital y, acute accent __ &THORN; = capital THORN, Icelandic __ &szlig; = small sharp s, German __ &agrave; = small a, grave accent __ &aacute; = small a, acute accent __ &acirc; = small a, circumflex accent __ &atilde; = small a, tilde __ &auml; = small a, umlaut mark __ &aring; = small a, ring __ &aelig; = small ae __ &ccedil; = small c, cedilla __ &egrave; = small e, grave accent __ &eacute; = small e, acute accent __ &ecirc; = small e, circumflex accent __ &euml; = small e, umlaut mark __ &igrave; = small i, grave accent __ &iacute; = small i, acute accent __ &icirc; = small i, circumflex accent __ &iuml; = small i, umlaut mark __ &eth; = small eth, Icelandic __ &ntilde; = small n, tilde __ &ograve; = small o, grave accent __ &oacute; = small o, acute accent __ &ocirc; = small o, circumflex accent __ &otilde; = small o, tilde __ &ouml; = small o, umlaut mark __ &oslash; = small o, slash __ &ugrave; = small u, grave accent __ &uacute; = small u, acute accent __ &ucirc; = small u, circumflex accent __ &uuml; = small u, umlaut mark __ &yacute; = small y, acute accent __ &thorn; = small thorn, Icelandic __ &yuml; = small y, umlaut mark";
  var enc = encodeURI(uri);
  var dec = decodeURI(enc);
  var res = dec;
  document.getElementById("demo").innerHTML = res;
}
</script>

</body>
</html>

Vinod Kumar
quelle
0

Testen Sie das Tutorial von Ourcodeworld Ourcodeworld - Kodieren und Dekodieren von HTML-Entitäten mit Javascript

Am wichtigsten ist das Beispiel der He.js-Bibliothek

he.encode('foo © bar ≠ baz ???? qux');
// → 'foo &#xA9; bar &#x2260; baz &#x1D306; qux'

// Passing an `options` object to `encode`, to explicitly encode all symbols:
he.encode('foo © bar ≠ baz ???? qux', {
 'encodeEverything': true
});

he.decode('foo &copy; bar &ne; baz &#x1D306; qux');
// → 'foo © bar ≠ baz ???? qux'
jking
quelle
0

Hier ist, wie ich die Codierung implementiert habe. Ich habe mich von den oben gegebenen Antworten inspirieren lassen.

function encodeHTML(str) {
  const code = {
      ' ' : '&nbsp;',
      '¢' : '&cent;',
      '£' : '&pound;',
      '¥' : '&yen;',
      '€' : '&euro;', 
      '©' : '&copy;',
      '®' : '&reg;',
      '<' : '&lt;', 
      '>' : '&gt;',  
      '"' : '&quot;', 
      '&' : '&amp;',
      '\'' : '&apos;'
  };
  return str.replace(/[\u00A0-\u9999<>\&''""]/gm, (i)=>code[i]);
}

// TEST
console.log(encodeHTML("Dolce & Gabbana"));
console.log(encodeHTML("Hamburgers < Pizza < Tacos"));
console.log(encodeHTML("Sixty > twelve"));
console.log(encodeHTML('Stuff in "quotation marks"'));
console.log(encodeHTML("Schindler's List"));
console.log(encodeHTML("<>"));

Dforrunner
quelle
-1

Mit der charCodeAt()Methode können Sie überprüfen, ob das angegebene Zeichen einen Wert über 127 hat, und es mit in eine numerische Zeichenreferenz konvertieren toString(16).

bolistene
quelle
4
Wäre schön, wenn Sie etwas über die magische Zahl 127und wie / warum diese Arbeit hinzufügen könnte ;)
yckart