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>®</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
javascript
html
JGallardo
quelle
quelle
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 denContent-Type
Header 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.sup
Elemente 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.<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.Antworten:
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:
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;
wonnn
werden den Unicode - Wert , den wir aus bekommencharCodeAt
.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
String.charCodeAt
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAtquelle
.js
Datei hinzufügen und die anderen Dinge hinzufügen, die mit einem<sup>
?sup
Tag (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.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:
Das
i
Flag 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
m
Flagge 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:
Siehe auch diese relevante Antwort zum Stapelüberlauf .
quelle
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
Sie können es dann wie folgt verwenden:
Ausgabe in der Konsole:
quelle
Wenn Sie ohne Bibliothek IE <9 nicht benötigen, können Sie ein HTML-Element erstellen und dessen Inhalt mit Node.textContent festlegen :
Hier ist ein Beispiel: https://jsfiddle.net/1erdhehv/
quelle
Sie können dies verwenden.
https://github.com/epeli/underscore.string/blob/master/escapeHTML.js
quelle
Wenn Sie vermeiden möchten, HTML-Entitäten mehrmals zu codieren
Beispiel
quelle
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 (&) -
&
] und benannte Zeichenreferenzen [Beispiel:&
] sind Typen voncharacter escape used in markup
.Vordefinierte Entitäten
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"&"
und durch ein beliebiges Vorkommen des">"
Zeichens durch die Zeichenfolge">"
. Ex:stackoverflow post
quelle
Eine Array-Lösung
quelle
Wenn Sie jQuery bereits verwenden, versuchen Sie es
html()
.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
he
Bibliothek, 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.
quelle
var converter=$("<div>");
und später wiederverwenden:html1=converter.text(text1).html(); html2=converter.text(text2).html();
...Manchmal möchten Sie einfach jedes Zeichen codieren ... Diese Funktion ersetzt "alles außer nichts" in regxp.
Code-Snippet anzeigen
quelle
^
durch a.
, um Emojis zu erhalten :function encode(e){return e.replace(/[.]/g,function(e){return"&#"+e.charCodeAt(0)+";"})}
.quelle
quelle
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
quelle
Hier ist, wie ich die Codierung implementiert habe. Ich habe mich von den oben gegebenen Antworten inspirieren lassen.
quelle
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 konvertierentoString(16)
.quelle
127
und wie / warum diese Arbeit hinzufügen könnte ;)