代码之家  ›  专栏  ›  技术社区  ›  twk Mark Adler

utf8字符串无效示例?

  •  137
  • twk Mark Adler  · 技术社区  · 17 年前

    6 回复  |  直到 15 年前
        2
  •  44
  •   philfreo    16 年前

    在PHP中:

    $examples = array(
        'Valid ASCII' => "a",
        'Valid 2 Octet Sequence' => "\xc3\xb1",
        'Invalid 2 Octet Sequence' => "\xc3\x28",
        'Invalid Sequence Identifier' => "\xa0\xa1",
        'Valid 3 Octet Sequence' => "\xe2\x82\xa1",
        'Invalid 3 Octet Sequence (in 2nd Octet)' => "\xe2\x28\xa1",
        'Invalid 3 Octet Sequence (in 3rd Octet)' => "\xe2\x82\x28",
        'Valid 4 Octet Sequence' => "\xf0\x90\x8c\xbc",
        'Invalid 4 Octet Sequence (in 2nd Octet)' => "\xf0\x28\x8c\xbc",
        'Invalid 4 Octet Sequence (in 3rd Octet)' => "\xf0\x90\x28\xbc",
        'Invalid 4 Octet Sequence (in 4th Octet)' => "\xf0\x28\x8c\x28",
        'Valid 5 Octet Sequence (but not Unicode!)' => "\xf8\xa1\xa1\xa1\xa1",
        'Valid 6 Octet Sequence (but not Unicode!)' => "\xfc\xa1\xa1\xa1\xa1\xa1",
    );
    

    自 http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php#54805

        3
  •  2
  •   user1015281    11 年前

    格式错误字节序列模式的概念可以从格式正确的字节序列表中得到。请参阅“ Table 3-7. Well-Formed UTF-8 Byte Sequences 在Unicode标准6.2中。

        Code Points    First Byte Second Byte Third Byte Fourth Byte
      U+0000 -   U+007F   00 - 7F
      U+0080 -   U+07FF   C2 - DF    80 - BF
      U+0800 -   U+0FFF   E0         A0 - BF     80 - BF
      U+1000 -   U+CFFF   E1 - EC    80 - BF     80 - BF
      U+D000 -   U+D7FF   ED         80 - 9F     80 - BF
      U+E000 -   U+FFFF   EE - EF    80 - BF     80 - BF
     U+10000 -  U+3FFFF   F0         90 - BF     80 - BF    80 - BF
     U+40000 -  U+FFFFF   F1 - F3    80 - BF     80 - BF    80 - BF
    U+100000 - U+10FFFF   F4         80 - 8F     80 - BF    80 - BF
    

    以下是由U+24B62生成的示例。我用它们做了一个bug报告: Bug #65045 mb_convert_encoding breaks well-formed character

    // U+24B62: "\xF0\xA4\xAD\xA2"
    "\xF0\xA4\xAD"    ."\xF0\xA4\xAD\xA2"."\xF0\xA4\xAD\xA2"
    "\xF0\xA4\xAD\xA2"."\xF0\xA4\xAD\xA2"."\xF0\xA4\xAD"
    

    // U+0800 - U+0FFF
    \xE0\x80\x80
    
    // U+D000 - U+D7FF
    \xED\xBF\xBF
    
    // U+10000 -  U+3FFFF
    \xF0\x80\x80\x80
    
    // U+100000 - U+10FFFF
    \xF4\xBF\xBF\xBF
    
        4
  •  1
  •   Dave Moten    8 年前

    ,尤其邪恶。我认为它是在ubuntu上结合的。

    逗号缩写

        5
  •  -5
  •   shoosh    17 年前

    (0 - 255) UTF-8 无论起点是否为字节,我都提出了一个奇怪的统一公式,它返回一个 1 (true) 或 0 (false) :

    function newUTF8start(__) {  
    
       return 118^(+__< 194) < (246-__)  }