Javascript jqueryreplace"£&引用;加上&;磅&引用;UTF-8

Javascript jqueryreplace"£&引用;加上&;磅&引用;UTF-8,javascript,jquery,html-entities,html-encode,Javascript,Jquery,Html Entities,Html Encode,我正在尝试将上传文件中的HTML特殊字符编码为字符串。除了“镑”标志,它什么都能用,老实说,我不知道为什么 我使用以下方法从元素中获取文本: var outputText = $("#displayAreaHidden").html(); outputText = encodeText(outputText); 然后,我尝试使用一个包含特殊字符的大型对象及其HTML代码替换来查找和替换 function encodeText(text) { var encodeTable = {

我正在尝试将上传文件中的HTML特殊字符编码为字符串。除了“镑”标志,它什么都能用,老实说,我不知道为什么

我使用以下方法从元素中获取文本:

var outputText = $("#displayAreaHidden").html();

outputText = encodeText(outputText);
然后,我尝试使用一个包含特殊字符的大型对象及其HTML代码替换来查找和替换

function encodeText(text) {
    var encodeTable = {
        //Huge object here
    };


    $.each(encodeTable, function(key, value) {
        if(text.indexOf(key) > -1) {
            text = text.replace(key, value);
        }
    })

    return text;
}
如果是“英镑”标志,则标的物具有:

"£" : "£"
这是没有被拿起,所以更换不会发生。我试过使用
£被传递到原始HTML文件和对象本身,但它仍然没有被拾取

非常感谢您的帮助

编辑 正在使用我的当前代码更新:

(HTML由上传的HTML文件“生成”)

JS

HTML


您可以获取html的所有文本并使用以下正则表达式:

var outputText = $("body");

outputText = encodeText(outputText);

function encodeText(text) {

      var text = $(text).children().each(function () {
          $(this).html( $(this).html().replace(/£/g,"£") );
      });

    return text;
}
编码“特殊”字符绝对不是解决这个问题的正确方法。您应该正确指定文档编码

无论如何,英镑符号出现问题的最可能原因是,除非使用全局标志,否则它将仅替换第一次出现:

'XX'.replace('X', 'O'); // => 'OX'
'XX'.replace(/X/g, 'O'); // => 'OO'
此外,为所有需要编码的字符(如外国字母、货币、数学符号、表情符号和花哨标点符号)维护一个表既不高效也不可靠

这里有一个函数,它将对基本多语言平面内的字符进行编码(包括磅符号,但不包括表情符号):

它一次扫描字符串一个字符(而不是多次扫描),并用十进制HTML代码替换非ASCII字符


它不会转义特殊的HTML字符,例如
首先执行
.indexOf()
测试没有多大意义。此外,您可能应该使用
g
标志或
.replace()从每个键创建正则表达式
调用只会影响每个键的第一个实例。您在页面中使用的字符集是什么?因为你不需要对符号进行编码,如果它像你的问题一样自然出现的话。你在问题标题中提到了UTF8。如果您真的在使用UTF8,那么您不需要将
符号编码为
£new RegExp(key,'g')
将对象密钥转换为正则表达式。这将为键“£”生成一个
/£/g
对象。谢谢!解释得很好。我明白/真的/我甚至不应该这样做,这让我很困惑,所以我想知道为什么并解决它-你做得太棒了!
var outputText = $("body");

outputText = encodeText(outputText);

function encodeText(text) {

      var text = $(text).children().each(function () {
          $(this).html( $(this).html().replace(/£/g,"£") );
      });

    return text;
}
'XX'.replace('X', 'O'); // => 'OX'
'XX'.replace(/X/g, 'O'); // => 'OO'
function encode(string) {
    return string.replace(/./g, function(char) {
        var code = char.charCodeAt(0);
        return code > 127 ? '&#' + code + ';' : char;
    });
}