Annotation of embedaddon/php/ext/standard/tests/strings/htmlentities-utf-3.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: Test get_next_char(), used by htmlentities()/htmlspecialchars(): validity of UTF-8 sequences
! 3: --FILE--
! 4: <?php
! 5:
! 6: /* conformance to Unicode 5.2, section 3.9, D92 */
! 7:
! 8: $val_ranges = array(
! 9: array(array(0x00, 0x7F)),
! 10: array(array(0xC2, 0xDF), array(0x80, 0xBF)),
! 11: array(array(0xE0, 0xE0), array(0xA0, 0xBF), array(0x80, 0xBF)),
! 12: array(array(0xE1, 0xEC), array(0x80, 0xBF), array(0x80, 0xBF)),
! 13: array(array(0xED, 0xED), array(0x80, 0x9F), array(0x80, 0xBF)),
! 14: array(array(0xEE, 0xEF), array(0x80, 0xBF), array(0x80, 0xBF)),
! 15: array(array(0xF0, 0xF0), array(0x90, 0xBF), array(0x80, 0xBF), array(0x80, 0xBF)),
! 16: array(array(0xF1, 0xF3), array(0x80, 0xBF), array(0x80, 0xBF), array(0x80, 0xBF)),
! 17: array(array(0xF4, 0xF4), array(0x80, 0x8F), array(0x80, 0xBF), array(0x80, 0xBF)),
! 18: );
! 19:
! 20: function is_valid($seq) {
! 21: global $val_ranges;
! 22: $b = ord($seq[0]);
! 23: foreach ($val_ranges as $l) {
! 24: if ($b >= $l[0][0] && $b <= $l[0][1]) {
! 25: if (count($l) != strlen($seq)) {
! 26: return false;
! 27: }
! 28: for ($n = 1; $n < strlen($seq); $n++) {
! 29: if (ord($seq[$n]) < $l[$n][0] || ord($seq[$n]) > $l[$n][1]) {
! 30: return false;
! 31: }
! 32: }
! 33: return true;
! 34: }
! 35: }
! 36: return false;
! 37: }
! 38:
! 39: function concordance($s) {
! 40: $vhe = strlen(htmlspecialchars($s, ENT_QUOTES, "UTF-8")) > 0;
! 41: $v = is_valid($s);
! 42: return ($vhe === $v);
! 43: }
! 44:
! 45: for ($b1 = 0xC0; $b1 < 0xE0; $b1++) {
! 46: for ($b2 = 0x80; $b2 < 0xBF; $b2++) {
! 47: $s = chr($b1).chr($b2);
! 48: if (!concordance($s))
! 49: echo "Discordance for ".bin2hex($s),"\n";
! 50: }
! 51: }
! 52:
! 53:
! 54: for ($b1 = 0xE0; $b1 < 0xEF; $b1++) {
! 55: for ($b2 = 0x80; $b2 < 0xBF; $b2++) {
! 56: $s = chr($b1).chr($b2)."\x80";
! 57: if (!concordance($s))
! 58: echo "Discordance for ".bin2hex($s),"\n";
! 59: $s = chr($b1).chr($b2)."\xBF";
! 60: if (!concordance($s))
! 61: echo "Discordance for ".bin2hex($s),"\n";
! 62: }
! 63: }
! 64:
! 65: for ($b1 = 0xF0; $b1 < 0xFF; $b1++) {
! 66: for ($b2 = 0x80; $b2 < 0xBF; $b2++) {
! 67: $s = chr($b1).chr($b2)."\x80\x80";
! 68: if (!concordance($s))
! 69: echo "Discordance for ".bin2hex($s),"\n";
! 70: $s = chr($b1).chr($b2)."\xBF\x80";
! 71: if (!concordance($s))
! 72: echo "Discordance for ".bin2hex($s),"\n";
! 73: $s = chr($b1).chr($b2)."\x80\xBF";
! 74: if (!concordance($s))
! 75: echo "Discordance for ".bin2hex($s),"\n";
! 76: $s = chr($b1).chr($b2)."\xBF\xBF";
! 77: if (!concordance($s))
! 78: echo "Discordance for ".bin2hex($s),"\n";
! 79: }
! 80: }
! 81: echo "Done.\n";
! 82: --EXPECT--
! 83: Done.
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>