Ho scritto una piccola funzione che fa questo. Sfugge solo "
, &
, <
e >
(ma di solito questo è tutto quello che in ogni caso bisogno). È leggermente più elegante delle soluzioni proposte in precedenza in quanto ne utilizza solo una .replace()
per fare tutta la conversione. ( EDIT 2: complessità del codice ridotta che rende la funzione ancora più piccola e più ordinata, se sei curioso del codice originale vedi fine di questa risposta.)
function escapeHtml(text) {
'use strict';
return text.replace(/[\"&<>]/g, function (a) {
return { '"': '"', '&': '&', '<': '<', '>': '>' }[a];
});
}
Questo è Javascript semplice, non utilizzato jQuery.
Escaping /
e '
troppo
Modifica in risposta al commento di mklement .
La funzione sopra può essere facilmente espansa per includere qualsiasi carattere. Per specificare più caratteri da scappare, è sufficiente inserirli entrambi nella classe di caratteri nell'espressione regolare (ovvero all'interno di /[...]/g
) e come una voce chr
nell'oggetto. ( EDIT 2: abbreviata anche questa funzione, allo stesso modo.)
function escapeHtml(text) {
'use strict';
return text.replace(/[\"&'\/<>]/g, function (a) {
return {
'"': '"', '&': '&', "'": ''',
'/': '/', '<': '<', '>': '>'
}[a];
});
}
Nota l'uso sopra di '
per apostrofo (l'entità simbolica '
potrebbe essere stata usata invece - è definita in XML, ma originariamente non era inclusa nelle specifiche HTML e potrebbe quindi non essere supportata da tutti i browser. Vedi: Articolo di Wikipedia sulle codifiche di caratteri HTML ). Ricordo anche di aver letto da qualche parte che l'uso di entità decimali è più ampiamente supportato rispetto all'uso di esadecimali, ma non riesco a trovare l'origine per quello ora. (E non ci possono essere molti browser là fuori che non supportano le entità esadecimali.)
Nota: aggiungere /
e '
all'elenco dei caratteri di escape non è poi così utile, poiché non hanno alcun significato speciale in HTML e non devono essere sottoposti a escape.
escapeHtml
Funzione originale
EDIT 2: la funzione originale utilizzava una variabile ( chr
) per memorizzare l'oggetto necessario per il .replace()
callback. Questa variabile necessitava anche di una funzione anonima aggiuntiva per la sua portata, rendendola (inutilmente) un po 'più grande e complessa.
var escapeHtml = (function () {
'use strict';
var chr = { '"': '"', '&': '&', '<': '<', '>': '>' };
return function (text) {
return text.replace(/[\"&<>]/g, function (a) { return chr[a]; });
};
}());
Non ho testato quale delle due versioni sia più veloce. In tal caso, sentiti libero di aggiungere informazioni e collegamenti al riguardo qui.