109 votes

Exemple de chaîne utf8 non valide?

Je teste la façon dont certains de mes codes traitent les données incorrectes et j'ai besoin de quelques séries d'octets non valides UTF-8.

Pouvez-vous poster, et idéalement, une explication de la raison pour laquelle ils sont mauvais / où vous les avez obtenus?

81voto

Nemanja Trifunovic Points 17239

Jetez un coup d'œil à la capacité du décodeur UTF-8 et au fichier de test de contrainte de Markus Kuhn

Vous trouverez des exemples de nombreuses irrégularités UTF-8, notamment des octets de début isolés, des octets de continuation manquants, des séquences trop longues, etc.

56voto

philfreo Points 12382

En 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",
);
 

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

4voto

masakielastic Points 431

L'idée de modèles de mal formée d'octets de séquences d'obtenir à partir de la table de la bien formé de séquences d'octets. Voir "Tableau 3-7. Bien Formé d'Octets UTF-8 Séquences" dans le Standard 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

Voici les exemples générés à partir de U+24B62. Je les ai utilisés pour un rapport de bug: Bug #65045 mb_convert_encoding pauses bien-formé de caractères

// 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"

La simplification de la gamme de fuite octets([0x80, 0xBF]) peut être vu dans les différentes bibliothèques.

// 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

-6voto

shoosh Points 34322

Fuzz Testing - génère une séquence aléatoire d'octets. Très probablement, vous obtiendrez certaines séquences illégales plus tôt que plus tard.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X