htmlentities() ist eine PHP-Funktion, die Sonderzeichen (wie <) in ihre maskierten/kodierten Werte (wie <) umwandelt. Dies ermöglicht es Ihnen, die Zeichenkette so anzuzeigen, dass der Browser sie nicht als HTML interpretiert.
JavaScript hat keine native Version davon. Wenn Sie nur die allernötigsten Dinge benötigen, damit der Browser sie nicht als HTML interpretiert, sollte dies funktionieren (von James Padolsey und ich hatte eine ähnliche Idee von David Walsh).
function htmlEntities(str) {
return String(str).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
}
Das PHP.js-Projekt, das alle nativen PHP-Funktionen nach JavaScript portiert, enthält ebenfalls ein Beispiel. Ich habe es ausprobiert und es funktioniert, aber mir wurde gesagt, dass viel von dem Code dieses Projekts schlecht geschrieben ist, daher habe ich es einfach gehalten und das obige verwendet.
Ich verwende die folgenden beiden Funktionen, meiner Meinung nach eine sehr solide, vollständige und einfache Methode.
Dieses spezielle Beispiel verwendet jQuery, aber das Prinzip hängt nicht von jQuery ab
Können Sie ein Beispiel zeigen, wie die obige jQuery-Kodierung in einem Formular funktioniert?
Ist das richtig?
Vielen Dank, haha! Das wird mir bei vielen Problemen mit AJAX helfen :D
Das ist ein schöner Hack, aber nicht nützlich für Webanwendungen in großem Maßstab, bei denen die Leistung entscheidend ist. Dieser Codeabschnitt erstellt ein Dummy-DOM-Element, um den Text darin zu manipulieren. DOM-Methodenaufrufe sind die ressourcenintensivsten Methoden. Ich würde die Verwendung mehrerer Ersetzungen, die auf die Zeichenkette angewendet werden, bevorzugen, anstatt ein Dummy-DOM-Element zu erstellen und zu zerstören.
Sicher, hier ist es
http://krinkle-tools.grizzdesign.nl/js-htmlentities.html
Danke für die beiden Funktionen, das hat mir aus der Patsche geholfen, als ich mit einer serialisierten Query-String gearbeitet habe.
Danke für die Info!! (^_^)b
Das Problem bei der jQuery-Methode ist, wenn Ihr Text htmlentities enthält, z.B.
$(”).text(‘&’).html()
gibt aus
“&”
vielleicht nicht das, was Sie wollen.....
die im obigen Beitrag gefilterten Entitäten. sollte lesen
$(‘<p>’).text(‘&’).html()
wird ausgeben
&amp;
Ihr Beispiel beweist, dass es perfekt funktioniert.
htmlEntities(‘&’) SOLLTE ‘&’ zurückgeben
Um es zu testen, sehen Sie, ob Sie denselben Wert erhalten, wenn Sie ihn wieder kodieren und dekodieren.
Danke, es hat geholfen..:)?
Sicher, es funktioniert beim Posten, aber was ist mit dem Speichern
Das Problem mit diesem Ansatz, wie Buzz angedeutet hat, ist, dass alle Ampersands, auch wenn sie bereits richtig html-kodiert sind, abgeglichen werden, was zu Dingen wie
htmlentities("&") == "&amp;"undhtmlentities(htmlentities("<")) == "&lt;"führt (nicht, dass Sie letzteres tun würden, aber nur um den Punkt zu verdeutlichen). Sie müssen den Ampersand-Regex auffüllen. Ein Leerzeichen reicht in den meisten Fällen aus, d.h.oder Sie können ausgefeilter vorgehen mit etwas wie
Warum nicht einfach alle
&durch ein&als erste Ersetzungsmethode ersetzen? Dies löst das Problem der doppelten Kodierung von Ampersands.Das funktioniert für mich ziemlich gut.
Es gibt kein Problem damit: Dieses Verhalten ist völlig korrekt.
Wenn Sie die eigene PHP-Funktion htmlentities(‘Ich & mich selbst’) verwenden, erhalten Sie korrekt ‘Ich &amp; mich selbst’ zurück. Und das ist der richtige Weg, um in HTML zu codieren, wenn der Text „Ich & mich selbst“ (so wie er ist) auf der Seite erscheinen soll.
Und wenn Sie ihn erneut kodieren, wird er zu ‘Ich && mich selbst’, und auch das ist korrekt.
„Auch wenn bereits richtig html-kodiert“ ist völliger Unsinn.
Wenn eine Anleitungsseite Ihnen zeigen möchte, wie man Entitäten schreibt, und & auf der Seite erscheinen soll, muss sie & für das & und dann „amp;“ so wie es ist schreiben, damit der HTML-Code &amp; wird, und das war's.
Die Tatsache, dass & in Ihren Augen „bereits richtig html-kodiert“ war, macht keinen Unterschied für den HTML-Code und den Parser...
Wie macht man das Gegenteil davon? Ich möchte die interpretierte HTML-Entität in JS anzeigen. Beispiel
Möchte, dass ‚textNext‘ als Gehe zu Schritt zwei » ausgegeben wird.
Bitte beachten Sie, dass dies nicht dasselbe tut wie die PHP-Funktion. Die PHP-Funktion verwendet HTML-Entitäten; während diese Funktion XML-Entitäten verwendet.
Zum Beispiel lässt diese Funktion
Orléansunverändert, während die PHP-Funktion diese Zeichenkette inOrléansumwandelt.Hat mir sehr geholfen... krEncodeEntities, krDencodeEntities haben mein Problem gelöst...
Ich bin vielleicht spät dran, aber hier ist mein Beitrag. Dies kodiert Entitäten aus einer innerHTML-Zeichenkette sicher und (meistens) nach Namen, mit einem optionalen Wahrheitswert-Parameter, um alles zu kodieren (also <, > und &). String.prototype.encodeHTMLEntities (1,45 KB)
function htmlEntities(str) {return String(str).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g,'&apos');
}
Vielen Dank für dieses Skript. Ich habe dies
.replace(/'/g,'&apos')am Ende der Zeile hinzugefügt. Vielleicht hilft esschauen Sie sich diesen Code an, bitte
$(“body”).text($(“body”).html());
eine Zeile Code ;)
Die von Chris hier gepostete Lösung funktioniert gut.
Allerdings diskutieren einige Kommentare auf dieser Seite erweiterte Implementierungen, die nicht nur unsichere Zeichen escapen, sondern auch alle Nicht-ASCII-Zeichen kodieren. Ich möchte nur sagen: HTML-Entitäten in JavaScript zu kodieren/dekodieren ist schwieriger als es scheint.
Hier ist eine Liste häufiger Probleme bei Skripten zum Kodieren/Dekodieren von HTML-Entitäten. Alle in den Kommentaren verlinkten Lösungen haben mindestens eines der dort genannten Probleme. Meine *he*-Bibliothek kümmert sich perfekt um all diese Dinge.
Dieser Trick hat mir den Tag gerettet! Danke für die einfache Lösung!
Ich wollte die exzellente he-Bibliothek (geschrieben von Mathias Bynens) empfehlen, aber ich sehe, dass Mathias sich bereits selbst darum gekümmert hat. Es sei denn, Sie sind sich zu 100 % sicher, dass die zu kodierende Zeichenkette keine Sonderzeichen enthält, ist die he-Bibliothek der einzige Weg.
ausgezeichnet Krinkle!!!!!!! benutze deinen Kommentar
Ich denke, wir müssen & und ” und ‘ nicht kodieren.
Wir müssen nur <, >, Leerzeichen und TAB kodieren.
Und ich habe gehört, dass nummerierte HtmlEntity-Codes besser unterstützt werden, also...
Mein Code ist unten.
String.prototype.enHtmlEntity = function(){return enHtmlEntity(this);};
String.prototype.deHtmlEntity = function(){return deHtmlEntity(this);};
/**
* HTML-Zeichenkette wird in Entitäten-Zeichenkette kodiert
* @author Zhao Xin
* @email [email protected]
* @param {String} str HTML-normale Zeichenkette
* @return {String} HTML-Entitäten-Zeichenkette
*/
function enHtmlEntity(str){
return String(str).replace(//g, ‘>’)
.replace(/[ ]/g, ‘ ’)
.replace(/\t/g, ‘’);
} /* Ende der Funktion enHtmlEntity */
/**
* HTML-Entität wird in normale Zeichen dekodiert
* @author Zhao Xin
* @email [email protected]
* @param {String} str HTML-Entitäten-Zeichenkette
* @return {String} HTML-normale Zeichenkette
*/
function deHtmlEntity(str){
return String(str).replace(/\<\;/gi, ”)
.replace(/\ \;/gi, ‘ ‘)
.replace(/\­\;/gi, ‘\t’);
} /* Ende der Funktion deHtmlEntity */
Danke dafür. Schnelle und einfache Lösung.
Diese Funktion ersetzt die gängigsten Charakternamen und alle Zahlen. (letzte Version)
(letzte Version)
Ich habe das einfache Anführungszeichen vergessen und es zur Funktion hinzugefügt. Hier ist es
function htmlEntities(str) {
return String(str)
.replace(/&/g, ‘&’)
.replace(/</g, ‘<‘)
.replace(/>/g, ‘>’)
.replace(/”/g, ‘"’)
.replace(/’/g, ‘'’)
;
}