用户可以复制并粘贴到textarea html输入中,有时会粘贴无效的UTF-8字符,例如,从包含标签的rtf文件中复制和粘贴。
如何检查字符串是否为有效的UTF-8?
答案 0 :(得分:1)
我认为你误解了“UTF-8字符”的含义。 UTF-8是Unicode的编码,它可以代表记录的人类历史中曾经存在过的每一个字符和字形,因此没有“无效”的UTF-8字符。
RTF是一种独立于底层编码系统的格式化系统 - 您可以使用带有ASCII,UTF-8,UTF-16等的RTF。 HTML中的文本框仅尊重纯文本,因此任何RTF格式都将被自动剥离(除非您使用的是“富编辑”组件,我认为您不是这样)。
但你确实描述了像空白字符(如标签:\t
)这样的东西用Unicode表示(等等,UTF-8)。包含这些字符的字符串仍然是“有效的UTF-8”,就业务要求而言,它只是无效。
我建议使用匹配不可见字符的正则表达式删除不需要的字符(来自此处:Match non printable/non ascii characters and remove from text)
textBoxContent = textBoxContent.replace(/[^\x20-\x7E]+/g, '');
表达式[^\x20-\x7E]
匹配不在代码点范围0x20
中的任何字符(32,正常空格字符' '
)到0x7E
(127,tidle {{1}其他所有人都将被删除。
Unicode的前127个代码点与ASCII相同,可在此处查看:http://www.asciitable.com/
答案 1 :(得分:0)
只是一个想法:
function checkUTF8(text) {
var utf8Text = text;
try {
// Try to convert to utf-8
utf8Text = decodeURIComponent(escape(text));
// If the conversion succeeds, text is not utf-8
}catch(e) {
// console.log(e.message); // URI malformed
// This exception means text is utf-8
}
return utf8Text; // returned text is always utf-8
}