Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 最低限度的文字卫生_String_Language Agnostic_Text_Sanitization - Fatal编程技术网

String 最低限度的文字卫生

String 最低限度的文字卫生,string,language-agnostic,text,sanitization,String,Language Agnostic,Text,Sanitization,在接受、存储、处理和显示Unicode文本的应用程序中(为了讨论的目的,假设它是一个web应用程序),应始终从传入文本中删除哪些字符? 我能想到一些,主要列在: 范围0x00-0x19(主要是控制字符),不包括0x09(选项卡)、0x0A(LF)和0x0D(CR) 范围0x7F-0x9F(更多控制字符) 可以安全接受的字符范围甚至更好地了解 还有其他级别的文本过滤—可以规范化具有多个表示形式的字符、替换非中断字符和删除零宽度字符—但我主要对基本内容感兴趣。我想这取决于您的目的。在UTF-8中,如

在接受、存储、处理和显示Unicode文本的应用程序中(为了讨论的目的,假设它是一个web应用程序),应始终从传入文本中删除哪些字符?

我能想到一些,主要列在:

  • 范围
    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中根本无效的字符(U+FFFF等),并且,如果您使用的是本机使用UTF-16的语言(例如Java、Windows上的Python),则需要筛选/替换任何不构成有效代理项对的代理项字符(U+D800–U+DFFF)

    范围0x00-0x19(主要是控制字符),不包括0x09(制表符)、0x0A(LF)和0x0D(CR)

    可以说(特别是对于web应用程序),也会丢失CR,并将选项卡变成空格

    范围0x7F-0x9F(更多控制字符)


    是的,远离那些,除非人们可能真的想要它们。(所以过去允许他们,这允许人们发布错误解码的字符串,这对诊断Unicode问题偶尔有用。)对于大多数网站,我想你不会想要它们。

    谢谢,但我并不是试图将文本限制为键盘字符,我只想过滤掉可能产生意外或危险结果的字符,比如空字符。