jQuery 将 “£” 替换为 “£” UTF-8

jQuery replace "£" with "£" UTF-8

本文关键字:amp pound UTF-8 替换 jQuery      更新时间:2023-09-26

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

您可以获取 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;
}

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

无论如何,井号问题最可能的原因是 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;
    });
}

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

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