String 最低限度的文字卫生
在接受、存储、处理和显示Unicode文本的应用程序中(为了讨论的目的,假设它是一个web应用程序),应始终从传入文本中删除哪些字符? 我能想到一些,主要列在:String 最低限度的文字卫生,string,language-agnostic,text,sanitization,String,Language Agnostic,Text,Sanitization,在接受、存储、处理和显示Unicode文本的应用程序中(为了讨论的目的,假设它是一个web应用程序),应始终从传入文本中删除哪些字符? 我能想到一些,主要列在: 范围0x00-0x19(主要是控制字符),不包括0x09(选项卡)、0x0A(LF)和0x0D(CR) 范围0x7F-0x9F(更多控制字符) 可以安全接受的字符范围甚至更好地了解 还有其他级别的文本过滤—可以规范化具有多个表示形式的字符、替换非中断字符和删除零宽度字符—但我主要对基本内容感兴趣。我想这取决于您的目的。在UTF-8中,如
0x00
-0x19
(主要是控制字符),不包括0x09
(选项卡)、0x0A
(LF)和0x0D
(CR)0x7F
-0x9F
(更多控制字符)还有其他级别的文本过滤—可以规范化具有多个表示形式的字符、替换非中断字符和删除零宽度字符—但我主要对基本内容感兴趣。我想这取决于您的目的。在UTF-8中,如果是你的突发奇想,你可以将用户限制为键盘字符,即9,10,13,[32-126]。如果您使用的是UTF-8,0x7f+范围表示您具有多字节Unicode字符。在ASCII中,0x7f+由特殊的显示/格式字符组成,并进行本地化,以允许根据所在位置的语言进行扩展 请注意,在UTF-8中,键盘字符可能因位置而异,因为如果用户的语言不使用不带重音的拉丁语(阿拉伯语、汉语、日语、希腊语、希腊语等),则用户可以使用其母语输入字符,这将超出0x00-0x7f范围 如果您查看一下,您可以看到UTF-8中的哪些字符将显示。请参阅W3说明。它将一类字符定义为“不鼓励在标记中使用”,对于大多数网站,我肯定会过滤掉这些字符。它主要包括以下字符:
- U+2028–9是时髦的换行符,如果您试图在字符串文本中使用它们,会混淆JavaScript
- U+202A–E是bidi控制代码,狡猾的用户可以插入这些代码,使文本在某些浏览器中显示为向后运行,甚至在给定HTML元素之外
- 语言覆盖控制代码,其作用域也可能在元素之外
- 物料清单
是的,远离那些,除非人们可能真的想要它们。(所以过去允许他们,这允许人们发布错误解码的字符串,这对诊断Unicode问题偶尔有用。)对于大多数网站,我想你不会想要它们。谢谢,但我并不是试图将文本限制为键盘字符,我只想过滤掉可能产生意外或危险结果的字符,比如空字符。