jQuery用“£”替换“£”UTF-8

时间:2016-03-17 13:33:52

标签: javascript jquery html-entities html-encode

我正在尝试从上传的文件中对字符串中的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

function processData() {
    var data = $.parseHTML(fr.result);

    $("#displayAreaHidden").html(data);

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

    $("#displayArea").text(encodeText(outputText));

}

function encodeText(text) {
  var text = escape(text);
  var encodeTable = {
        "£" : "£"
    };

  $.each(encodeTable, function(key, value) {
      text = text.replace(escape(key), escape(value));
  })

  return unescape(text);
}

HTML

<textarea id="displayArea"></textarea>

<div id="displayAreaHidden"></div>

2 个答案:

答案 0 :(得分:2)

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

var outputText = $("body");

outputText = encodeText(outputText);

function encodeText(text) {

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

    return text;
}

答案 1 :(得分:1)

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

无论如何,英镑符号问题最可能的原因是String.prototype.replace只会替换第一次出现,除非你使用全局标志:

'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;
    });
}

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

它不会转义特殊的HTML字符,例如<&。如果这是你想要的,它们应该事先编码。要正确编码完整的Unicode空间,您需要一个结合代理对的更复杂的函数。