![](/img/trans.png)
[英]Encode and decode HTML entities using Javascript or JQuery in Opencart
[英]Native JavaScript or ES6 way to encode and decode HTML entities?
是否有使用 JavaScript 或 ES6 編碼或解碼HTML 實體的本機方法? 例如, <
將被編碼為<
. 有像 Node.js 的html-entities
這樣的庫,但感覺應該在 JavaScript 中內置一些東西來處理這個常見的需求。
使用 es6 轉義 html 的一個不錯的函數:
const escapeHTML = str => str.replace(/[&<>'"]/g,
tag => ({
'&': '&',
'<': '<',
'>': '>',
"'": ''',
'"': '"'
}[tag]));
對於沒有庫的純 JS,您可以使用純 Javascript 編碼和解碼 HTML 實體,如下所示:
let encode = str => {
let buf = [];
for (var i = str.length - 1; i >= 0; i--) {
buf.unshift(['&#', str[i].charCodeAt(), ';'].join(''));
}
return buf.join('');
}
let decode = str => {
return str.replace(/&#(\d+);/g, function(match, dec) {
return String.fromCharCode(dec);
});
}
用法:
encode("Hello > © <") // "Hello > © <"
decode("Hello > © © <") // "Hello > © © <"
但是,您可以看到這種方法有幾個缺點:
H
→ H
>
等瀏覽器支持的 html 實體/命名字符代碼的完整列表一無所知>
用法:
he.encode('foo © bar ≠ baz 𝌆 qux');
// Output : 'foo © bar ≠ baz 𝌆 qux'
he.decode('foo © bar ≠ baz 𝌆 qux');
// Output : 'foo © bar ≠ baz 𝌆 qux'
要取消unescape
HTML 實體,您的瀏覽器很智能,會為您完成
方式1
_unescape(html: string) :string {
const divElement = document.createElement("div");
divElement.innerHTML = html;
return divElement.textContent || tmp.innerText || "";
}
方式2
_unescape(html: string) :string {
let returnText = html;
returnText = returnText.replace(/ /gi, " ");
returnText = returnText.replace(/&/gi, "&");
returnText = returnText.replace(/"/gi, `"`);
returnText = returnText.replace(/</gi, "<");
returnText = returnText.replace(/>/gi, ">");
return returnText;
}
您也可以使用下划線或lodash的 unescape 方法,但這會忽略
並且只處理&
, <
, >
, "
, 和'
字符。
@rasafel 提供的答案(編碼)的反向(解碼):
const decodeEscapedHTML = (str) =>
str.replace(
/&(\D+);/gi,
(tag) =>
({
'&': '&',
'<': '<',
'>': '>',
''': "'",
'"': '"',
}[tag]),
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.