有谁知道如何将特殊字符转换为HTML
in Javascript
?
例子:
&
(&) 变成&
."
(双引号)未设置"
时变为ENT_NOQUOTES
。'
(单引号)'
仅在ENT_QUOTES
设置时变为。<
(小于)变成<
。>
(大于)变成>
。
有谁知道如何将特殊字符转换为HTML
in Javascript
?
例子:
&
(&) 变成&
."
(双引号)未设置"
时变为ENT_NOQUOTES
。'
(单引号)'
仅在ENT_QUOTES
设置时变为。<
(小于)变成<
。>
(大于)变成>
。我认为最好的方法是使用浏览器内置的 HTML 转义功能来处理许多情况。要做到这一点,只需在 DOM 树中创建一个元素innerText
并将元素的设置为您的字符串。然后检索innerHTML
元素的 。浏览器将返回一个 HTML 编码的字符串。
function HtmlEncode(s)
{
var el = document.createElement("div");
el.innerText = el.textContent = s;
s = el.innerHTML;
return s;
}
测试运行:
alert(HtmlEncode('&;\'><"'));
输出:
&;'><"
这种转义 HTML 的方法也被Prototype JS 库使用,尽管与我给出的简单示例不同。
注意:您仍然需要自己转义引号(双引号和单引号)。您可以使用其他人在此处概述的任何方法。
你需要一个函数来做类似的事情
return mystring.replace(/&/g, "&").replace(/>/g, ">").replace(/</g, "<").replace(/"/g, """);
但考虑到您对单/双引号的不同处理的愿望。
此通用函数将每个非字母字符编码为其 htmlcode(数字):
function HTMLEncode(str) {
var i = str.length,
aRet = [];
while (i--) {
var iC = str[i].charCodeAt();
if (iC < 65 || iC > 127 || (iC>90 && iC<97)) {
aRet[i] = '&#'+iC+';';
} else {
aRet[i] = str[i];
}
}
return aRet.join('');
}
对于那些想要解码&#xxx;
字符串中的整数字符代码的人,请使用此函数:
function decodeHtmlCharCodes(str) {
return str.replace(/(&#(\d+);)/g, function(match, capture, charCode) {
return String.fromCharCode(charCode);
});
}
// Will output "The show that gained int’l reputation’!"
console.log(decodeHtmlCharCodes('The show that gained int’l reputation’!'));
const decodeHtmlCharCodes = str =>
str.replace(/(&#(\d+);)/g, (match, capture, charCode) =>
String.fromCharCode(charCode));
// Will output "The show that gained int’l reputation’!"
console.log(decodeHtmlCharCodes('The show that gained int’l reputation’!'));
从 Mozilla...
请注意,charCodeAt 将始终返回小于 65,536 的值。这是因为较高的代码点由一对(较低值的)“代理”伪字符表示,这些伪字符用于构成真实字符。因此,为了检查或再现值 65,536 及以上的单个字符的完整字符,对于此类字符,不仅需要检索 charCodeAt(i),还需要检索 charCodeAt(i+1)(就像检查/ 再现带有两个 > 字母的字符串)。
最佳解决方案
/**
* (c) 2012 Steven Levithan <http://slevithan.com/>
* MIT license
*/
if (!String.prototype.codePointAt) {
String.prototype.codePointAt = function (pos) {
pos = isNaN(pos) ? 0 : pos;
var str = String(this),
code = str.charCodeAt(pos),
next = str.charCodeAt(pos + 1);
// If a surrogate pair
if (0xD800 <= code && code <= 0xDBFF && 0xDC00 <= next && next <= 0xDFFF) {
return ((code - 0xD800) * 0x400) + (next - 0xDC00) + 0x10000;
}
return code;
};
}
/**
* Encodes special html characters
* @param string
* @return {*}
*/
function html_encode(string) {
var ret_val = '';
for (var i = 0; i < string.length; i++) {
if (string.codePointAt(i) > 127) {
ret_val += '&#' + string.codePointAt(i) + ';';
} else {
ret_val += string.charAt(i);
}
}
return ret_val;
}
用法示例:
html_encode("✈");