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>