价值&#to unicode转换

时间:2013-10-07 07:56:47

标签: javascript regex unicode

我有很多¶形式的字符,我希望在文本编辑器中显示为unicode字符。 这应该转换它们:

var newtext = doctext.replace(
    /&#(\d+);/g, 
    String.fromCharCode(parseInt("$1", 10))
);

但似乎没有用。正则表达式/&#(\d+);/正在向我提取数字 - 但String.fromCharCode似乎没有给出我想要的结果。怎么了?

2 个答案:

答案 0 :(得分:6)

替换部分应该是匿名函数而不是表达式:

var newtext = doctext.replace(
    /&#(\d+);/g, 
    function($0, $1) {
        return String.fromCharCode(parseInt($1, 10));
    }
);

答案 1 :(得分:2)

如果您使用完整的HTML(即不控制输入内容),则替换方法并非万无一失。例如,如果您的实体都是十进制的,但是对于十六进制A不起作用,那么Jack提交的方法(显然也是原始帖子中的想法)也能很好地工作,对于"这样的命名实体更是如此。 {1}}。

为此,你可以做另一个技巧:创建一个元素,将其innerHTML设置为源,然后读出它的文本值。基本上,浏览器知道如何处理实体,所以我们委托。 :)在jQuery中很容易:

$('<div/>').html('&amp;').text()
// => "&"

使用普通JS,它会变得更加冗长:

var el = document.createElement();
el.innerHTML = '&amp;';
el.textContent
// => "&"