Annotation of embedaddon/php/ext/standard/tests/strings/htmlentities-utf-3.phpt, revision 1.1.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>