在javascript中有HTML转义字符实体的原生方式吗?

时间:2016-04-01 22:37:14

标签: javascript html-entities html-escape-characters

提供的Unicode字符134069具有HTML转义𠮵

是否有(最好是原生的)方法从Javascript中获取字符实体的HTML转义?

2 个答案:

答案 0 :(得分:2)

您可以像这样获取char的点值和十六进制值:

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

答案 1 :(得分:2)

这是一个将所有非ASCII7字符和>&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);转换为HTML实体的函数:

&#13;
&#13;
length
&#13;
&#13;
&#13;

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