有没有一种本地的方法可以在javascript中对HTML字符实体进行转义



134069给出的Unicode字符𠮵具有HTML转义𠮵

有没有一种(最好是原生的)方法可以从Javascript中获得字符实体的HTML转义?

您可以获得如下字符的点值和十六进制值:

var codePoint = '𠮵'.codePointAt(0); //codePoint = 134069
var hexValue = '𠮵'.codePointAt(0).toString(16); //hexValue = 20bb5
var htmlEscape = '&#x' + hexValue + ';'; //htmlEscape = 𠮵

下面是一个工作示例:

$('#doIt').click(function() {
  $('#outputHex').html($('#inputText').val().codePointAt(0).toString(16));
  $('#outputString').html('&#x' + $('#inputText').val().codePointAt(0).toString(16) + ';');
  $('#outputChar').html('&#x' + $('#inputText').val().codePointAt(0).toString(16) + ';');
});
code {
  display: block;
  padding: 4px;
  background-color: #EFEFEF;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="inputText"></textarea>
<button id="doIt">do it</button>
<h3>result</h3>
<code id="outputHex"></code>
<code id="outputString"></code>
<code id="outputChar"></code>

另外,codePointAt是一个ES6函数,在旧的浏览器中不受支持。如果浏览器阻止代码在此处运行:JSFiddle Example

这里有一个函数,可以将所有非ASCII7字符以及<>&转换为HTML实体:

function htmlEntities(s) {
    return Array.from(s).map(function (c) {
        return c.codePointAt(0) < 128 && '<&>'.indexOf(c) == -1 
            ? c 
            : '&#x' + c.codePointAt(0).toString(16) + ';';
    }).join('');
}
var s = 'This is u{20BB5}, a special character & encoded in HTML.';
document.body.innerHTML = htmlEntities(s);

请注意,在Javascript字符串中,扩展的unicode字符被计算为两个字符(例如在length中)。像Array.from[...s]这样的ES6构造确保获得正确的块。

最新更新