用户可以复制并粘贴到textarea html输入中,有时会粘贴无效的UTF-8字符,例如,从包含选项卡的rtf文件进行复制和粘贴。检查javascript字符串是否有效UTF-8
如何检查字符串是否为有效的UTF-8?
用户可以复制并粘贴到textarea html输入中,有时会粘贴无效的UTF-8字符,例如,从包含选项卡的rtf文件进行复制和粘贴。检查javascript字符串是否有效UTF-8
如何检查字符串是否为有效的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,字符'~'
字符),所有其他将被删除。
Unicode的首个127码点是相同的ASCII码,可以在这里看到:http://www.asciitable.com/
为了更正这个答案中的一些误解:没有像UTF8“characters”这样的东西;作为编码方案,存在“UTF8字节序列”,编码Unicode码点,并且这些字节序列在字节序列中可能绝对受到非法值的影响。同样,Unicode作为“正字法结构”到数字代码*的形式映射也具有可能不被使用的某些数字。遇到含有非法字节序列的UTF8字节流或含有非法数字的解码Unicode序列是完全可能的,因此:是的,存在“无效的UTF-8字符”。 –
只是一个想法:
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
}
'escape'已弃用,不应使用(因为它无法正确处理Unicode) – Quentin
可能帮助你http://stackoverflow.com/questions/20639052/check -if-the-bytes-sequence-is-valid-utf-8-sequence-in-javascript –
看起来类似于[在Javascript中验证用户的UTF-8名称](http://stackoverflow.com/questions/6381752/ validating-users-utf-8-name-in-javascript) – Abhijit