Annotation of embedaddon/php/ext/standard/tests/strings/htmlentities20.phpt, revision 1.1.1.1
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
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>