jQuery 将“£”替换为“£” UTF-8
jQuery replace "£" with "£" UTF-8
我正在尝试对上传文件中的字符串中的 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 是 "made")
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,"£") );
});
return text;
}
编码"special"字符绝对不是解决这个问题的正确方法。您应该改为正确指定文档编码。
无论如何,井号问题最可能的原因是 String.prototype.replace 只会替换第一个出现的地方,除非您使用全局标志:
'XX'.replace('X', 'O'); // => 'OX'
'XX'.replace(/X/g, 'O'); // => 'OO'
此外,为所有需要编码的字符(例如外国字母表、货币、数学符号、表情符号和花哨的标点符号)维护 table 既不高效也不可靠。
这是一个将在基本多语言平面(包括井号,但不包括表情符号)内对字符进行编码的函数:
function encode(string) {
return string.replace(/./g, function(char) {
var code = char.charCodeAt(0);
return code > 127 ? '&#' + code + ';' : char;
});
}
它一次扫描一个字符(而不是多次扫描),并将非 ASCII 字符替换为十进制 HTML 代码。
它不会转义特殊的 HTML 字符,例如 <
和 &
。如果这是你想要的,它们应该预先编码。要正确编码完整的 Unicode space,您需要一个结合代理项对的更复杂的函数。
我正在尝试对上传文件中的字符串中的 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 是 "made")
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,"£") );
});
return text;
}
编码"special"字符绝对不是解决这个问题的正确方法。您应该改为正确指定文档编码。
无论如何,井号问题最可能的原因是 String.prototype.replace 只会替换第一个出现的地方,除非您使用全局标志:
'XX'.replace('X', 'O'); // => 'OX'
'XX'.replace(/X/g, 'O'); // => 'OO'
此外,为所有需要编码的字符(例如外国字母表、货币、数学符号、表情符号和花哨的标点符号)维护 table 既不高效也不可靠。
这是一个将在基本多语言平面(包括井号,但不包括表情符号)内对字符进行编码的函数:
function encode(string) {
return string.replace(/./g, function(char) {
var code = char.charCodeAt(0);
return code > 127 ? '&#' + code + ';' : char;
});
}
它一次扫描一个字符(而不是多次扫描),并将非 ASCII 字符替换为十进制 HTML 代码。
它不会转义特殊的 HTML 字符,例如 <
和 &
。如果这是你想要的,它们应该预先编码。要正确编码完整的 Unicode space,您需要一个结合代理项对的更复杂的函数。