Return to htmlentities20.phpt CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / standard / tests / strings |
1.1 misho 1: --TEST-- 2: htmlentities() / htmlspecialchars() ENT_DISALLOWED 3: --FILE-- 4: <?php 5: function codepoint_to_utf8($k) { 6: if ($k < 0x80) { 7: $retval = pack('C', $k); 8: } else if ($k < 0x800) { 9: $retval = pack('C2', 10: 0xc0 | ($k >> 6), 11: 0x80 | ($k & 0x3f)); 12: } else if ($k < 0x10000) { 13: $retval = pack('C3', 14: 0xe0 | ($k >> 12), 15: 0x80 | (($k >> 6) & 0x3f), 16: 0x80 | ($k & 0x3f)); 17: } else { 18: $retval = pack('C4', 19: 0xf0 | ($k >> 18), 20: 0x80 | (($k >> 12) & 0x3f), 21: 0x80 | (($k >> 6) & 0x3f), 22: 0x80 | ($k & 0x3f)); 23: } 24: return $retval; 25: } 26: 27: $tests = array( 28: 0x00, //C0 29: 0x01, 30: 0x09, 31: 0x0A, 32: 0x0B, 33: 0x0C, 34: 0x0D, 35: 0x0E, 36: 0x1F, 37: 0x20, //allowed always 38: 0x7F, //DEL 39: 0x80, //C1 40: 0x9F, 41: 0xA0, //allowed always 42: 0xD7FF, //surrogates 43: 0xD800, 44: 0xDFFF, 45: 0xE000, //allowed always 46: 0xFFFE, //nonchar 47: 0xFFFF, 48: 0xFDCF, //allowed always 49: 0xFDD0, //nonchar 50: 0xFDEF, 51: 0xFDF0, //allowed always 52: 0x2FFFE, //nonchar 53: 0x2FFFF, 54: ); 55: $tests2 = array_map('codepoint_to_utf8', $tests); 56: 57: $subchr = codepoint_to_utf8(0xFFFD); 58: 59: function test($flag) { 60: global $tests, $tests2; 61: $i = -1; 62: foreach ($tests2 as $test) { 63: $i++; 64: $a = htmlentities($test, $flag | ENT_DISALLOWED, "UTF-8"); 65: $b = htmlspecialchars($test, $flag | ENT_DISALLOWED, "UTF-8"); 66: if ($a == "" && $b == "") { echo sprintf("%05X", $tests[$i]), ": INVALID SEQUENCE\n"; continue; } 67: echo sprintf("%05X", $tests[$i]), ": ", bin2hex($a), " ", bin2hex($b), "\n"; 68: } 69: } 70: 71: echo "*** Testing HTML 4.01 ***\n"; 72: 73: test(ENT_HTML401); 74: 75: echo "\n*** Testing XHTML 1.0 ***\n"; 76: 77: test(ENT_XHTML); 78: 79: echo "\n*** Testing HTML 5 ***\n"; 80: 81: test(ENT_HTML5); 82: 83: echo "\n*** Testing XML 1.0 ***\n"; 84: 85: test(ENT_XML1); 86: 87: ?> 88: --EXPECT-- 89: *** Testing HTML 4.01 *** 90: 00000: efbfbd efbfbd 91: 00001: efbfbd efbfbd 92: 00009: 09 09 93: 0000A: 0a 0a 94: 0000B: efbfbd efbfbd 95: 0000C: efbfbd efbfbd 96: 0000D: 0d 0d 97: 0000E: efbfbd efbfbd 98: 0001F: efbfbd efbfbd 99: 00020: 20 20 100: 0007F: efbfbd efbfbd 101: 00080: efbfbd efbfbd 102: 0009F: efbfbd efbfbd 103: 000A0: 266e6273703b c2a0 104: 0D7FF: ed9fbf ed9fbf 105: 0D800: INVALID SEQUENCE 106: 0DFFF: INVALID SEQUENCE 107: 0E000: ee8080 ee8080 108: 0FFFE: efbfbe efbfbe 109: 0FFFF: efbfbf efbfbf 110: 0FDCF: efb78f efb78f 111: 0FDD0: efb790 efb790 112: 0FDEF: efb7af efb7af 113: 0FDF0: efb7b0 efb7b0 114: 2FFFE: f0afbfbe f0afbfbe 115: 2FFFF: f0afbfbf f0afbfbf 116: 117: *** Testing XHTML 1.0 *** 118: 00000: efbfbd efbfbd 119: 00001: efbfbd efbfbd 120: 00009: 09 09 121: 0000A: 0a 0a 122: 0000B: efbfbd efbfbd 123: 0000C: efbfbd efbfbd 124: 0000D: 0d 0d 125: 0000E: efbfbd efbfbd 126: 0001F: efbfbd efbfbd 127: 00020: 20 20 128: 0007F: 7f 7f 129: 00080: c280 c280 130: 0009F: c29f c29f 131: 000A0: 266e6273703b c2a0 132: 0D7FF: ed9fbf ed9fbf 133: 0D800: INVALID SEQUENCE 134: 0DFFF: INVALID SEQUENCE 135: 0E000: ee8080 ee8080 136: 0FFFE: efbfbd efbfbd 137: 0FFFF: efbfbd efbfbd 138: 0FDCF: efb78f efb78f 139: 0FDD0: efb790 efb790 140: 0FDEF: efb7af efb7af 141: 0FDF0: efb7b0 efb7b0 142: 2FFFE: f0afbfbe f0afbfbe 143: 2FFFF: f0afbfbf f0afbfbf 144: 145: *** Testing HTML 5 *** 146: 00000: efbfbd efbfbd 147: 00001: efbfbd efbfbd 148: 00009: 265461623b 09 149: 0000A: 264e65774c696e653b 0a 150: 0000B: efbfbd efbfbd 151: 0000C: 0c 0c 152: 0000D: 0d 0d 153: 0000E: efbfbd efbfbd 154: 0001F: efbfbd efbfbd 155: 00020: 20 20 156: 0007F: efbfbd efbfbd 157: 00080: efbfbd efbfbd 158: 0009F: efbfbd efbfbd 159: 000A0: 266e6273703b c2a0 160: 0D7FF: ed9fbf ed9fbf 161: 0D800: INVALID SEQUENCE 162: 0DFFF: INVALID SEQUENCE 163: 0E000: ee8080 ee8080 164: 0FFFE: efbfbd efbfbd 165: 0FFFF: efbfbd efbfbd 166: 0FDCF: efb78f efb78f 167: 0FDD0: efbfbd efbfbd 168: 0FDEF: efbfbd efbfbd 169: 0FDF0: efb7b0 efb7b0 170: 2FFFE: efbfbd efbfbd 171: 2FFFF: efbfbd efbfbd 172: 173: *** Testing XML 1.0 *** 174: 00000: efbfbd efbfbd 175: 00001: efbfbd efbfbd 176: 00009: 09 09 177: 0000A: 0a 0a 178: 0000B: efbfbd efbfbd 179: 0000C: efbfbd efbfbd 180: 0000D: 0d 0d 181: 0000E: efbfbd efbfbd 182: 0001F: efbfbd efbfbd 183: 00020: 20 20 184: 0007F: 7f 7f 185: 00080: c280 c280 186: 0009F: c29f c29f 187: 000A0: c2a0 c2a0 188: 0D7FF: ed9fbf ed9fbf 189: 0D800: INVALID SEQUENCE 190: 0DFFF: INVALID SEQUENCE 191: 0E000: ee8080 ee8080 192: 0FFFE: efbfbd efbfbd 193: 0FFFF: efbfbd efbfbd 194: 0FDCF: efb78f efb78f 195: 0FDD0: efb790 efb790 196: 0FDEF: efb7af efb7af 197: 0FDF0: efb7b0 efb7b0 198: 2FFFE: f0afbfbe f0afbfbe 199: 2FFFF: f0afbfbf f0afbfbf