diff options
Diffstat (limited to 'ext/standard/tests/strings/htmlentities20.phpt')
-rw-r--r-- | ext/standard/tests/strings/htmlentities20.phpt | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/ext/standard/tests/strings/htmlentities20.phpt b/ext/standard/tests/strings/htmlentities20.phpt new file mode 100644 index 0000000..92c996b --- /dev/null +++ b/ext/standard/tests/strings/htmlentities20.phpt @@ -0,0 +1,199 @@ +--TEST-- +htmlentities() / htmlspecialchars() ENT_DISALLOWED +--FILE-- +<?php +function codepoint_to_utf8($k) { + if ($k < 0x80) { + $retval = pack('C', $k); + } else if ($k < 0x800) { + $retval = pack('C2', + 0xc0 | ($k >> 6), + 0x80 | ($k & 0x3f)); + } else if ($k < 0x10000) { + $retval = pack('C3', + 0xe0 | ($k >> 12), + 0x80 | (($k >> 6) & 0x3f), + 0x80 | ($k & 0x3f)); + } else { + $retval = pack('C4', + 0xf0 | ($k >> 18), + 0x80 | (($k >> 12) & 0x3f), + 0x80 | (($k >> 6) & 0x3f), + 0x80 | ($k & 0x3f)); + } + return $retval; +} + +$tests = array( + 0x00, //C0 + 0x01, + 0x09, + 0x0A, + 0x0B, + 0x0C, + 0x0D, + 0x0E, + 0x1F, + 0x20, //allowed always + 0x7F, //DEL + 0x80, //C1 + 0x9F, + 0xA0, //allowed always + 0xD7FF, //surrogates + 0xD800, + 0xDFFF, + 0xE000, //allowed always + 0xFFFE, //nonchar + 0xFFFF, + 0xFDCF, //allowed always + 0xFDD0, //nonchar + 0xFDEF, + 0xFDF0, //allowed always + 0x2FFFE, //nonchar + 0x2FFFF, +); +$tests2 = array_map('codepoint_to_utf8', $tests); + +$subchr = codepoint_to_utf8(0xFFFD); + +function test($flag) { + global $tests, $tests2; + $i = -1; + foreach ($tests2 as $test) { + $i++; + $a = htmlentities($test, $flag | ENT_DISALLOWED, "UTF-8"); + $b = htmlspecialchars($test, $flag | ENT_DISALLOWED, "UTF-8"); + if ($a == "" && $b == "") { echo sprintf("%05X", $tests[$i]), ": INVALID SEQUENCE\n"; continue; } + echo sprintf("%05X", $tests[$i]), ": ", bin2hex($a), " ", bin2hex($b), "\n"; + } +} + +echo "*** Testing HTML 4.01 ***\n"; + +test(ENT_HTML401); + +echo "\n*** Testing XHTML 1.0 ***\n"; + +test(ENT_XHTML); + +echo "\n*** Testing HTML 5 ***\n"; + +test(ENT_HTML5); + +echo "\n*** Testing XML 1.0 ***\n"; + +test(ENT_XML1); + +?> +--EXPECT-- +*** Testing HTML 4.01 *** +00000: efbfbd efbfbd +00001: efbfbd efbfbd +00009: 09 09 +0000A: 0a 0a +0000B: efbfbd efbfbd +0000C: efbfbd efbfbd +0000D: 0d 0d +0000E: efbfbd efbfbd +0001F: efbfbd efbfbd +00020: 20 20 +0007F: efbfbd efbfbd +00080: efbfbd efbfbd +0009F: efbfbd efbfbd +000A0: 266e6273703b c2a0 +0D7FF: ed9fbf ed9fbf +0D800: INVALID SEQUENCE +0DFFF: INVALID SEQUENCE +0E000: ee8080 ee8080 +0FFFE: efbfbe efbfbe +0FFFF: efbfbf efbfbf +0FDCF: efb78f efb78f +0FDD0: efb790 efb790 +0FDEF: efb7af efb7af +0FDF0: efb7b0 efb7b0 +2FFFE: f0afbfbe f0afbfbe +2FFFF: f0afbfbf f0afbfbf + +*** Testing XHTML 1.0 *** +00000: efbfbd efbfbd +00001: efbfbd efbfbd +00009: 09 09 +0000A: 0a 0a +0000B: efbfbd efbfbd +0000C: efbfbd efbfbd +0000D: 0d 0d +0000E: efbfbd efbfbd +0001F: efbfbd efbfbd +00020: 20 20 +0007F: 7f 7f +00080: c280 c280 +0009F: c29f c29f +000A0: 266e6273703b c2a0 +0D7FF: ed9fbf ed9fbf +0D800: INVALID SEQUENCE +0DFFF: INVALID SEQUENCE +0E000: ee8080 ee8080 +0FFFE: efbfbd efbfbd +0FFFF: efbfbd efbfbd +0FDCF: efb78f efb78f +0FDD0: efb790 efb790 +0FDEF: efb7af efb7af +0FDF0: efb7b0 efb7b0 +2FFFE: f0afbfbe f0afbfbe +2FFFF: f0afbfbf f0afbfbf + +*** Testing HTML 5 *** +00000: efbfbd efbfbd +00001: efbfbd efbfbd +00009: 265461623b 09 +0000A: 264e65774c696e653b 0a +0000B: efbfbd efbfbd +0000C: 0c 0c +0000D: 0d 0d +0000E: efbfbd efbfbd +0001F: efbfbd efbfbd +00020: 20 20 +0007F: efbfbd efbfbd +00080: efbfbd efbfbd +0009F: efbfbd efbfbd +000A0: 266e6273703b c2a0 +0D7FF: ed9fbf ed9fbf +0D800: INVALID SEQUENCE +0DFFF: INVALID SEQUENCE +0E000: ee8080 ee8080 +0FFFE: efbfbd efbfbd +0FFFF: efbfbd efbfbd +0FDCF: efb78f efb78f +0FDD0: efbfbd efbfbd +0FDEF: efbfbd efbfbd +0FDF0: efb7b0 efb7b0 +2FFFE: efbfbd efbfbd +2FFFF: efbfbd efbfbd + +*** Testing XML 1.0 *** +00000: efbfbd efbfbd +00001: efbfbd efbfbd +00009: 09 09 +0000A: 0a 0a +0000B: efbfbd efbfbd +0000C: efbfbd efbfbd +0000D: 0d 0d +0000E: efbfbd efbfbd +0001F: efbfbd efbfbd +00020: 20 20 +0007F: 7f 7f +00080: c280 c280 +0009F: c29f c29f +000A0: c2a0 c2a0 +0D7FF: ed9fbf ed9fbf +0D800: INVALID SEQUENCE +0DFFF: INVALID SEQUENCE +0E000: ee8080 ee8080 +0FFFE: efbfbd efbfbd +0FFFF: efbfbd efbfbd +0FDCF: efb78f efb78f +0FDD0: efb790 efb790 +0FDEF: efb7af efb7af +0FDF0: efb7b0 efb7b0 +2FFFE: f0afbfbe f0afbfbe +2FFFF: f0afbfbf f0afbfbf |