Return to htmlentities-utf-3.phpt CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / standard / tests / strings |
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.