insertar example ejemplos con codigo javascript jquery html

javascript - example - jquery innertext



Decodificación de la entidad HTML (18)

Aquí hay otra versión:

function convertHTMLEntity(text){ const span = document.createElement(''span''); return text .replace(/&[#A-Za-z0-9]+;/gi, (entity,position,text)=> { span.innerHTML = entity; return span.innerText; }); } console.log(convertHTMLEntity(''Large < £ 500''));

Esta pregunta ya tiene una respuesta aquí:

¿Cómo puedo codificar y decodificar entidades HTML utilizando JavaScript o JQuery?

var varTitle = "Chris' corner";

Quiero que sea

var varTitle = "Chris'' corner";


Aquí hay un método rápido que no requiere la creación de un div, y decodifica los caracteres escapados HTML "más comunes":

function decodeHTMLEntities(text) { var entities = [ [''amp'', ''&''], [''apos'', ''/'''], [''#x27'', ''/'''], [''#x2F'', ''/''], [''#39'', ''/'''], [''#47'', ''/''], [''lt'', ''<''], [''gt'', ''>''], [''nbsp'', '' ''], [''quot'', ''"''] ]; for (var i = 0, max = entities.length; i < max; ++i) text = text.replace(new RegExp(''&''+entities[i][0]+'';'', ''g''), entities[i][1]); return text; }


Aquí hay una versión completa.

function htmldecode(s){ window.HTML_ESC_MAP = { "nbsp":" ","iexcl":"¡","cent":"¢","pound":"£","curren":"¤","yen":"¥","brvbar":"¦","sect":"§","uml":"¨","copy":"©","ordf":"ª","laquo":"«","not":"¬","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":"ÿ","fnof":"ƒ","Alpha":"Α","Beta":"Β","Gamma":"Γ","Delta":"Δ","Epsilon":"Ε","Zeta":"Ζ","Eta":"Η","Theta":"Θ","Iota":"Ι","Kappa":"Κ","Lambda":"Λ","Mu":"Μ","Nu":"Ν","Xi":"Ξ","Omicron":"Ο","Pi":"Π","Rho":"Ρ","Sigma":"Σ","Tau":"Τ","Upsilon":"Υ","Phi":"Φ","Chi":"Χ","Psi":"Ψ","Omega":"Ω","alpha":"α","beta":"β","gamma":"γ","delta":"δ","epsilon":"ε","zeta":"ζ","eta":"η","theta":"θ","iota":"ι","kappa":"κ","lambda":"λ","mu":"μ","nu":"ν","xi":"ξ","omicron":"ο","pi":"π","rho":"ρ","sigmaf":"ς","sigma":"σ","tau":"τ","upsilon":"υ","phi":"φ","chi":"χ","psi":"ψ","omega":"ω","thetasym":"ϑ","upsih":"ϒ","piv":"ϖ","bull":"•","hellip":"…","prime":"′","Prime":"″","oline":"‾","frasl":"⁄","weierp":"℘","image":"ℑ","real":"ℜ","trade":"™","alefsym":"ℵ","larr":"←","uarr":"↑","rarr":"→","darr":"↓","harr":"↔","crarr":"↵","lArr":"⇐","uArr":"⇑","rArr":"⇒","dArr":"⇓","hArr":"⇔","forall":"∀","part":"∂","exist":"∃","empty":"∅","nabla":"∇","isin":"∈","notin":"∉","ni":"∋","prod":"∏","sum":"∑","minus":"−","lowast":"∗","radic":"√","prop":"∝","infin":"∞","ang":"∠","and":"∧","or":"∨","cap":"∩","cup":"∪","int":"∫","there4":"∴","sim":"∼","cong":"≅","asymp":"≈","ne":"≠","equiv":"≡","le":"≤","ge":"≥","sub":"⊂","sup":"⊃","nsub":"⊄","sube":"⊆","supe":"⊇","oplus":"⊕","otimes":"⊗","perp":"⊥","sdot":"⋅","lceil":"⌈","rceil":"⌉","lfloor":"⌊","rfloor":"⌋","lang":"⟨","rang":"⟩","loz":"◊","spades":"♠","clubs":"♣","hearts":"♥","diams":"♦","/"":"quot","amp":"&","lt":"<","gt":">","OElig":"Œ","oelig":"œ","Scaron":"Š","scaron":"š","Yuml":"Ÿ","circ":"ˆ","tilde":"˜","ndash":"–","mdash":"—","lsquo":"‘","rsquo":"’","sbquo":"‚","ldquo":"“","rdquo":"”","bdquo":"„","dagger":"†","Dagger":"‡","permil":"‰","lsaquo":"‹","rsaquo":"›","euro":"€"}; if(!window.HTML_ESC_MAP_EXP) window.HTML_ESC_MAP_EXP = new RegExp("&("+Object.keys(HTML_ESC_MAP).join("|")+");","g"); return s?s.replace(window.HTML_ESC_MAP_EXP,function(x){ return HTML_ESC_MAP[x.substring(1,x.length-1)]||x; }):s; }

Uso

htmldecode("&sum;&nbsp;&gt;&euro;");


Como @Robert K y @mattcasey tienen un buen código, pensé que contribuiría aquí con una versión de CoffeeScript, en caso de que alguien en el futuro pudiera usarlo:

String::unescape = (strict = false) -> ### # Take escaped text, and return the unescaped version # # @param string str | String to be used # @param bool strict | Stict mode will remove all HTML # # Test it here: # https://jsfiddle.net/tigerhawkvok/t9pn1dn5/ # # Code: https://gist.github.com/tigerhawkvok/285b8631ed6ebef4446d ### # Create a dummy element element = document.createElement("div") decodeHTMLEntities = (str) -> if str? and typeof str is "string" unless strict is true # escape HTML tags str = escape(str).replace(/%26/g,''&'').replace(/%23/g,''#'').replace(/%3B/g,'';'') else str = str.replace(/<script[^>]*>([/S/s]*?)<//script>/gmi, '''') str = str.replace(/<//?/w(?:[^"''>]|"[^"]*"|''[^'']*'')*>/gmi, '''') element.innerHTML = str if element.innerText # Do we support innerText? str = element.innerText element.innerText = "" else # Firefox str = element.textContent element.textContent = "" unescape(str) # Remove encoded or double-encoded tags fixHtmlEncodings = (string) -> string = string.replace(//&amp;#/mg, ''&#'') # The rest, for double-encodings string = string.replace(//&quot;/mg, ''"'') string = string.replace(//&quote;/mg, ''"'') string = string.replace(//&#95;/mg, ''_'') string = string.replace(//&#39;/mg, "''") string = string.replace(//&#34;/mg, ''"'') string = string.replace(//&#62;/mg, ''>'') string = string.replace(//&#60;/mg, ''<'') string # Run it tmp = fixHtmlEncodings(this) decodeHTMLEntities(tmp)

Ver https://jsfiddle.net/tigerhawkvok/t9pn1dn5/7/ o https://gist.github.com/tigerhawkvok/285b8631ed6ebef4446d (incluye JS compilado y probablemente se actualice en comparación con esta respuesta)


Como dijo Robert K, no use jQuery.html (). Text () para decodificar entidades html porque no es seguro porque las entradas del usuario nunca deben tener acceso al DOM. Lea acerca de XSS por qué esto no es seguro.

En su lugar, intente la biblioteca de Underscore.js utilidad Underscore.js que viene con los métodos de unescape y unescape :

escape

Escapa de una cadena para insertarla en HTML, reemplazando los caracteres & , < , > , " , ` y '' .

_.escape(''Curly, Larry & Moe''); => "Curly, Larry &amp; Moe"

unescape

Lo contrario de escape, reemplaza &amp; , &lt; , &gt; , &quot; , &#96; y &#x27; Con sus homólogos sin escaparse.

_.unescape(''Curly, Larry &amp; Moe''); => "Curly, Larry & Moe"

Para admitir la decodificación de más caracteres, simplemente copie el método de subrayado unescape y agregue más caracteres al mapa.


Creo que eso es exactamente lo contrario de la solución elegida.

var decoded = $("<div/>").text(encodedStr).html();

Intentalo :)


Esta es mi forma favorita de decodificar caracteres HTML. La ventaja de usar este código es que las etiquetas también se conservan.

function decodeHtml(html) { var txt = document.createElement("textarea"); txt.innerHTML = html; return txt.value; }

Ejemplo: http://jsfiddle.net/k65s3/

Entrada:

Entity:&nbsp;Bad attempt at XSS:<script>alert(''new/nline?'')</script><br>

Salida:

Entity: Bad attempt at XSS:<script>alert(''new/nline?'')</script><br>


Inspirada en la solución de Robert K., esta versión no elimina las etiquetas HTML y es igual de segura.

var decode_entities = (function() { // Remove HTML Entities var element = document.createElement(''div''); function decode_HTML_entities (str) { if(str && typeof str === ''string'') { // Escape HTML before decoding for HTML Entities str = escape(str).replace(/%26/g,''&'').replace(/%23/g,''#'').replace(/%3B/g,'';''); element.innerHTML = str; if(element.innerText){ str = element.innerText; element.innerText = ''''; }else{ // Firefox support str = element.textContent; element.textContent = ''''; } } return unescape(str); } return decode_HTML_entities; })();


Inspirado por la solución de Robert K, elimina las etiquetas html y evita la ejecución de scripts y manejadores de eventos como: <img src=fake onerror="prompt(1)"> Probado en el último Chrome, FF, IE (debería funcionar desde IE9, pero no ha probado) ).

var decodeEntities = (function () { //create a new html document (doesn''t execute script tags in child elements) var doc = document.implementation.createHTMLDocument(""); var element = doc.createElement(''div''); function getText(str) { element.innerHTML = str; str = element.textContent; element.textContent = ''''; return str; } function decodeHTMLEntities(str) { if (str && typeof str === ''string'') { var x = getText(str); while (str !== x) { str = x; x = getText(x); } return x; } } return decodeHTMLEntities; })();

Simplemente llame:

decodeEntities(''<img src=fake onerror="prompt(1)">''); decodeEntities("<script>alert(''aaa!'')</script>");



Para agregar otro "inspirado por Robert K" a la lista, aquí hay otra versión segura que no elimina las etiquetas HTML . En lugar de ejecutar toda la cadena a través del analizador HTML, extrae solo las entidades y las convierte.

var decodeEntities = (function() { // this prevents any overhead from creating the object each time var element = document.createElement(''div''); // regular expression matching HTML entities var entity = /&(?:#x[a-f0-9]+|#[0-9]+|[a-z0-9]+);?/ig; return function decodeHTMLEntities(str) { // find and replace all the html entities str = str.replace(entity, function(m) { element.innerHTML = m; return element.textContent; }); // reset the value element.textContent = ''''; return str; } })();


Para hacerlo en javascript puro sin jquery o predefiniendo todo, puede realizar un ciclo de la cadena html codificada a través de los elementos inner HTML y innerText (/ textContent) para cada paso de decodificación que se requiera:

<html> <head> <title>For every decode step, cycle through innerHTML and innerText </title> <script> function decode(str) { var d = document.createElement("div"); d.innerHTML = str; return typeof d.innerText !== ''undefined'' ? d.innerText : d.textContent; } </script> </head> <body> <script> var encodedString = "&lt;p&gt;name&lt;/p&gt;&lt;p&gt;&lt;span style=/"font-size:xx-small;/"&gt;ajde&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;da&lt;/em&gt;&lt;/p&gt;"; </script> <input type=button onclick="document.body.innerHTML=decode(encodedString)"/> </body> </html>


Podrías probar algo como:

var Title = $(''<textarea />'').html("Chris&apos; corner").text(); console.log(Title);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

JS Fiddle .

Una versión más interactiva:

$(''form'').submit(function() { var theString = $(''#string'').val(); var varTitle = $(''<textarea />'').html(theString).text(); $(''#output'').text(varTitle); return false; });

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form action="#" method="post"> <fieldset> <label for="string">Enter a html-encoded string to decode</label> <input type="text" name="string" id="string" /> </fieldset> <fieldset> <input type="submit" value="decode" /> </fieldset> </form> <div id="output"></div>

JS Fiddle .


Recomiendo no usar el código jQuery que fue aceptado como la respuesta. Si bien no inserta la cadena para decodificar en la página, hace que se creen cosas como scripts y elementos HTML. Esto es mucho más código del que necesitamos. En cambio, sugiero usar una función más segura y optimizada.

var decodeEntities = (function() { // this prevents any overhead from creating the object each time var element = document.createElement(''div''); function decodeHTMLEntities (str) { if(str && typeof str === ''string'') { // strip script/html tags str = str.replace(/<script[^>]*>([/S/s]*?)<//script>/gmi, ''''); str = str.replace(/<//?/w(?:[^"''>]|"[^"]*"|''[^'']*'')*>/gmi, ''''); element.innerHTML = str; str = element.textContent; element.textContent = ''''; } return str; } return decodeHTMLEntities; })();

http://jsfiddle.net/LYteC/4/

Para usar esta función, solo llame a decodeEntities("&amp;") y usará las mismas técnicas subyacentes que usará la versión jQuery, pero sin la sobrecarga de jQuery, y después de limpiar las etiquetas HTML en la entrada. Vea el comentario de Mike Samuel sobre la respuesta aceptada sobre cómo filtrar las etiquetas HTML.

Esta función se puede usar fácilmente como un complemento de jQuery agregando la siguiente línea en su proyecto.

jQuery.decodeEntities = decodeEntities;


Sé que llego un poco tarde al juego, pero pensé que podría proporcionar el siguiente fragmento de código como ejemplo de cómo decodifico las entidades HTML usando jQuery:

var varTitleE = "Chris&apos; corner"; var varTitleD = $("<div/>").html(varTitleE).text(); console.log(varTitleE + " vs. " + varTitleD);​​​​​​​​​​​

No olvide encender su inspector / firebug para ver los resultados de la consola, o simplemente reemplace console.log (...) w / alert (...)

Dicho esto, esto es lo que mi consola a través del inspector de Google Chrome leyó:

Chris&apos; corner vs. Chris'' corner



Un enfoque más funcional a la respuesta de @William Lahti:

var entities = { ''amp'': ''&'', ''apos'': ''/''', ''#x27'': ''/''', ''#x2F'': ''/'', ''#39'': ''/''', ''#47'': ''/'', ''lt'': ''<'', ''gt'': ''>'', ''nbsp'': '' '', ''quot'': ''"'' } function decodeHTMLEntities (text) { return text.replace(/&([^;]+);/gm, function (match, entity) { return entities[entity] || match }) }


jQuery proporciona una forma de codificar y decodificar entidades html.

Si usa una etiqueta "<div />", eliminará todo el html.

function htmlDecode(value) { return $("<div/>").html(value).text(); } function htmlEncode(value) { return $(''<div/>'').text(value).html(); }

Si usa una etiqueta "<textarea />", conservará las etiquetas html.

function htmlDecode(value) { return $("<textarea/>").html(value).text(); } function htmlEncode(value) { return $(''<textarea/>'').text(value).html(); }