如何在javascript中解码html实体的十六进制代码到文本?

nee*_*raj 3 javascript string hex text decode

我在将字符串字符的十六进制值转换为正常测试值方面遇到困难,例如十六进制'到sting的值 是'撇号.

可以在此链接上找到另一个十六进制字符值:http://character-code.com/.

有人可以告诉我是否存在这样做的javascript方法,还是应该为此目的使用一些外部javascript库插件?

我一直在使用已经尝试过URIencodeURIencodecomponent,但没有运气

Rya*_*ale 8

您可以使用String.fromCharCode- 但首先需要将十六进制值(以 16 为基数)转换为整数(以 10 为基数)。这样做的方法如下:

    var encoded = "'";
    var REG_HEX = /&#x([a-fA-F0-9]+);/g;

    var decoded = encoded.replace(REG_HEX, function(match, group1){
        var num = parseInt(group1, 16); //=> 39
        return String.fromCharCode(num); //=> '
    });

    console.log(decoded); //=> "'"
Run Code Online (Sandbox Code Playgroud)

要将十进制转换回十六进制,您可以这样做:

    decoded.toString(16); //=> 27
Run Code Online (Sandbox Code Playgroud)


Rob*_*obG 7

您可以使用主机提供的解析器将实体插入元素中,然后返回textContent(或者替换支持的innerText):

var el = document.createElement('span');
el.innerHTML = ''';

console.log('' is a ' +  (el.textContent || el.innerText));  // ' is a '
Run Code Online (Sandbox Code Playgroud)

当然,这对浏览器不支持的实体不起作用.

编辑

将上述内容转换为函数:

var entityToText = (function() {

  // Create a single span to parse the entity
  var span = document.createElement('span');

  // Choose textContent or innerText depending on support
  var theText = typeof span.textContent == 'string'? 'textContent' : 'innerText';

  // Return the actual function
  return function(entity) {
    span.innerHTML = entity;
    return span[theText];
  }
}());
Run Code Online (Sandbox Code Playgroud)