用户可以复制并粘贴到textarea html输入中,有时会粘贴无效的UTF-8字符,例如,从包含制表符的rtf文件复制和粘贴。
如何检查字符串是否是有效的UTF-8?
我想你误解了“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 '~'
字符),所有其他字符将被删除。
Unicode的前127个代码点与ASCII相同,可以在这里看到:http://www.asciitable.com/
只是一个想法:
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
}