【发布时间】:2016-07-18 19:36:57
【问题描述】:
用户可以复制并粘贴到 textarea html 输入中,有时会粘贴无效的 UTF-8 字符,例如,从包含制表符的 rtf 文件中复制和粘贴。
如何检查字符串是否为有效的 UTF-8?
【问题讨论】:
标签: javascript html utf-8
用户可以复制并粘贴到 textarea html 输入中,有时会粘贴无效的 UTF-8 字符,例如,从包含制表符的 rtf 文件中复制和粘贴。
如何检查字符串是否为有效的 UTF-8?
【问题讨论】:
标签: javascript html utf-8
我认为您误解了“UTF-8 字符”的含义。 UTF-8 是一种 Unicode 编码,它可以表示几乎所有人类历史上曾经存在过的单个字符和字形,因此不存在“无效”的 UTF-8 字符。
RTF 是一个独立于底层编码系统工作的格式化系统 - 您可以将 RTF 与 ASCII、UTF-8、UTF-16 等一起使用。 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/
【讨论】:
只是一个想法:
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)