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

时间:2014-09-01 14:25:51

标签: javascript string text hex decode

我在将字符串字符的十六进制值转换为正常测试值时遇到了困难 例如,'的十六进制值为',即撇号。

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

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

我已尝试使用URIencodeURIencodecomponent,但没有运气

2 个答案:

答案 0 :(得分:7)

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

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

console.log('' is a ' +  (el.textContent || el.innerText));  // ' is a '

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

修改

将上述内容转换为函数:

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];
  }
}());

答案 1 :(得分:4)

我知道这很痛苦,但您可以使用String.fromCharCode - 但您首先需要将十六进制值(基数16)转换为十进制值(基数为10)。以下是您将如何做到这一点:

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

var hex = encoded.replace(REG_HEX, "$1"); //=> 27
var dec = parseInt(hex, 16); //=> 39
var char = String.fromCharCode(dec); //=> '

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

dec.toString(16); //=> 27