2

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

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

但似乎不起作用。正则表达式/&#(\d+);/让我得到了数字——但String.fromCharCode似乎没有给出我想要的结果。怎么了?

4

2 回答 2

6

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

var newtext = doctext.replace(
    /&#(\d+);/g, 
    function($0, $1) {
        return String.fromCharCode(parseInt($1, 10));
    }
);
于 2013-10-07T07:59:28.077 回答
2

如果您使用完整的 HTML(即不控制输入内容),则替换方法并非万无一失。例如,如果您的实体都是十进制的,Jack 提交的方法(显然也是原始帖子中的想法)非常有效,但不适用于 hex A,对于命名实体(如".

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

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

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

var el = document.createElement();
el.innerHTML = '&amp;';
el.textContent
// => "&"
于 2013-10-07T08:05:09.370 回答