htmlentities22.phpt 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. --TEST--
  2. htmlentities() / htmlspecialchars() ENT_DISALLOWED with entities and no double encode
  3. --FILE--
  4. <?php
  5. $tests = array(
  6. "&#0;", //C0
  7. "&#1;",
  8. "&#x09;",
  9. "&#x0A;",
  10. "&#x0B;",
  11. "&#x0C;",
  12. "&#x0D;", //note that HTML5 is unique in that it forbids this entity, but allows a literal U+0D
  13. "&#x0E;",
  14. "&#x1F;",
  15. "&#x20;", //allowed always
  16. "&#x7F;", //DEL
  17. "&#x80;", //C1
  18. "&#x9F;",
  19. "&#xA0;", //allowed always
  20. "&#xD7FF;", //surrogates
  21. "&#xD800;",
  22. "&#xDFFF;",
  23. "&#xE000;", //allowed always
  24. "&#xFFFE;", //nonchar
  25. "&#xFFFF;",
  26. "&#xFDCF;", //allowed always
  27. "&#xFDD0;", //nonchar
  28. "&#xFDEF;",
  29. "&#xFDF0;", //allowed always
  30. "&#x2FFFE;", //nonchar
  31. "&#x2FFFF;",
  32. "&#x110000;", //bad reference
  33. );
  34. function test($flag, $flag2=ENT_DISALLOWED, $charset="UTF-8") {
  35. global $tests;
  36. $i = -1;
  37. error_reporting(-1 & ~E_STRICT);
  38. foreach ($tests as $test) {
  39. $i++;
  40. $a = htmlentities($test, $flag | $flag2, $charset, FALSE);
  41. $b = htmlspecialchars($test, $flag | $flag2, $charset, FALSE);
  42. if ($a == $b)
  43. echo sprintf("%s\t%s", $test, $a==$test?"NOT CHANGED":"CHANGED"), "\n";
  44. else
  45. echo sprintf("%s\tCHANGED (%s, %s)", $test, $a, $b), "\n";
  46. }
  47. error_reporting(-1);
  48. }
  49. echo "*** Testing HTML 4.01 ***\n";
  50. test(ENT_HTML401);
  51. echo "\n*** Testing XHTML 1.0 ***\n";
  52. test(ENT_XHTML);
  53. echo "\n*** Testing HTML 5 ***\n";
  54. test(ENT_HTML5);
  55. echo "\n*** Testing XML 1.0 ***\n";
  56. test(ENT_XML1);
  57. echo "\n*** Testing 5 without the flag ***\n";
  58. test(ENT_HTML5, 0);
  59. echo "\n*** Testing HTML 5 with another single-byte encoding ***\n";
  60. test(ENT_HTML5, ENT_DISALLOWED, "Windows-1251");
  61. echo "\n*** Testing HTML 5 with another multibyte-byte encoding ***\n";
  62. test(ENT_HTML5, ENT_DISALLOWED, "SJIS");
  63. ?>
  64. --EXPECT--
  65. *** Testing HTML 4.01 ***
  66. &#0; NOT CHANGED
  67. &#1; NOT CHANGED
  68. &#x09; NOT CHANGED
  69. &#x0A; NOT CHANGED
  70. &#x0B; NOT CHANGED
  71. &#x0C; NOT CHANGED
  72. &#x0D; NOT CHANGED
  73. &#x0E; NOT CHANGED
  74. &#x1F; NOT CHANGED
  75. &#x20; NOT CHANGED
  76. &#x7F; NOT CHANGED
  77. &#x80; NOT CHANGED
  78. &#x9F; NOT CHANGED
  79. &#xA0; NOT CHANGED
  80. &#xD7FF; NOT CHANGED
  81. &#xD800; NOT CHANGED
  82. &#xDFFF; NOT CHANGED
  83. &#xE000; NOT CHANGED
  84. &#xFFFE; NOT CHANGED
  85. &#xFFFF; NOT CHANGED
  86. &#xFDCF; NOT CHANGED
  87. &#xFDD0; NOT CHANGED
  88. &#xFDEF; NOT CHANGED
  89. &#xFDF0; NOT CHANGED
  90. &#x2FFFE; NOT CHANGED
  91. &#x2FFFF; NOT CHANGED
  92. &#x110000; CHANGED
  93. *** Testing XHTML 1.0 ***
  94. &#0; CHANGED
  95. &#1; CHANGED
  96. &#x09; NOT CHANGED
  97. &#x0A; NOT CHANGED
  98. &#x0B; CHANGED
  99. &#x0C; CHANGED
  100. &#x0D; NOT CHANGED
  101. &#x0E; CHANGED
  102. &#x1F; CHANGED
  103. &#x20; NOT CHANGED
  104. &#x7F; NOT CHANGED
  105. &#x80; NOT CHANGED
  106. &#x9F; NOT CHANGED
  107. &#xA0; NOT CHANGED
  108. &#xD7FF; NOT CHANGED
  109. &#xD800; CHANGED
  110. &#xDFFF; CHANGED
  111. &#xE000; NOT CHANGED
  112. &#xFFFE; CHANGED
  113. &#xFFFF; CHANGED
  114. &#xFDCF; NOT CHANGED
  115. &#xFDD0; NOT CHANGED
  116. &#xFDEF; NOT CHANGED
  117. &#xFDF0; NOT CHANGED
  118. &#x2FFFE; NOT CHANGED
  119. &#x2FFFF; NOT CHANGED
  120. &#x110000; CHANGED
  121. *** Testing HTML 5 ***
  122. &#0; CHANGED (&amp;&num;0&semi;, &amp;#0;)
  123. &#1; CHANGED (&amp;&num;1&semi;, &amp;#1;)
  124. &#x09; NOT CHANGED
  125. &#x0A; NOT CHANGED
  126. &#x0B; CHANGED (&amp;&num;x0B&semi;, &amp;#x0B;)
  127. &#x0C; NOT CHANGED
  128. &#x0D; CHANGED (&amp;&num;x0D&semi;, &amp;#x0D;)
  129. &#x0E; CHANGED (&amp;&num;x0E&semi;, &amp;#x0E;)
  130. &#x1F; CHANGED (&amp;&num;x1F&semi;, &amp;#x1F;)
  131. &#x20; NOT CHANGED
  132. &#x7F; CHANGED (&amp;&num;x7F&semi;, &amp;#x7F;)
  133. &#x80; CHANGED (&amp;&num;x80&semi;, &amp;#x80;)
  134. &#x9F; CHANGED (&amp;&num;x9F&semi;, &amp;#x9F;)
  135. &#xA0; NOT CHANGED
  136. &#xD7FF; NOT CHANGED
  137. &#xD800; NOT CHANGED
  138. &#xDFFF; NOT CHANGED
  139. &#xE000; NOT CHANGED
  140. &#xFFFE; CHANGED (&amp;&num;xFFFE&semi;, &amp;#xFFFE;)
  141. &#xFFFF; CHANGED (&amp;&num;xFFFF&semi;, &amp;#xFFFF;)
  142. &#xFDCF; NOT CHANGED
  143. &#xFDD0; CHANGED (&amp;&num;xFDD0&semi;, &amp;#xFDD0;)
  144. &#xFDEF; CHANGED (&amp;&num;xFDEF&semi;, &amp;#xFDEF;)
  145. &#xFDF0; NOT CHANGED
  146. &#x2FFFE; CHANGED (&amp;&num;x2FFFE&semi;, &amp;#x2FFFE;)
  147. &#x2FFFF; CHANGED (&amp;&num;x2FFFF&semi;, &amp;#x2FFFF;)
  148. &#x110000; CHANGED (&amp;&num;x110000&semi;, &amp;#x110000;)
  149. *** Testing XML 1.0 ***
  150. &#0; CHANGED
  151. &#1; CHANGED
  152. &#x09; NOT CHANGED
  153. &#x0A; NOT CHANGED
  154. &#x0B; CHANGED
  155. &#x0C; CHANGED
  156. &#x0D; NOT CHANGED
  157. &#x0E; CHANGED
  158. &#x1F; CHANGED
  159. &#x20; NOT CHANGED
  160. &#x7F; NOT CHANGED
  161. &#x80; NOT CHANGED
  162. &#x9F; NOT CHANGED
  163. &#xA0; NOT CHANGED
  164. &#xD7FF; NOT CHANGED
  165. &#xD800; CHANGED
  166. &#xDFFF; CHANGED
  167. &#xE000; NOT CHANGED
  168. &#xFFFE; CHANGED
  169. &#xFFFF; CHANGED
  170. &#xFDCF; NOT CHANGED
  171. &#xFDD0; NOT CHANGED
  172. &#xFDEF; NOT CHANGED
  173. &#xFDF0; NOT CHANGED
  174. &#x2FFFE; NOT CHANGED
  175. &#x2FFFF; NOT CHANGED
  176. &#x110000; CHANGED
  177. *** Testing 5 without the flag ***
  178. &#0; NOT CHANGED
  179. &#1; NOT CHANGED
  180. &#x09; NOT CHANGED
  181. &#x0A; NOT CHANGED
  182. &#x0B; NOT CHANGED
  183. &#x0C; NOT CHANGED
  184. &#x0D; NOT CHANGED
  185. &#x0E; NOT CHANGED
  186. &#x1F; NOT CHANGED
  187. &#x20; NOT CHANGED
  188. &#x7F; NOT CHANGED
  189. &#x80; NOT CHANGED
  190. &#x9F; NOT CHANGED
  191. &#xA0; NOT CHANGED
  192. &#xD7FF; NOT CHANGED
  193. &#xD800; NOT CHANGED
  194. &#xDFFF; NOT CHANGED
  195. &#xE000; NOT CHANGED
  196. &#xFFFE; NOT CHANGED
  197. &#xFFFF; NOT CHANGED
  198. &#xFDCF; NOT CHANGED
  199. &#xFDD0; NOT CHANGED
  200. &#xFDEF; NOT CHANGED
  201. &#xFDF0; NOT CHANGED
  202. &#x2FFFE; NOT CHANGED
  203. &#x2FFFF; NOT CHANGED
  204. &#x110000; CHANGED (&amp;&num;x110000&semi;, &amp;#x110000;)
  205. *** Testing HTML 5 with another single-byte encoding ***
  206. &#0; CHANGED (&amp;&num;0&semi;, &amp;#0;)
  207. &#1; CHANGED (&amp;&num;1&semi;, &amp;#1;)
  208. &#x09; NOT CHANGED
  209. &#x0A; NOT CHANGED
  210. &#x0B; CHANGED (&amp;&num;x0B&semi;, &amp;#x0B;)
  211. &#x0C; NOT CHANGED
  212. &#x0D; CHANGED (&amp;&num;x0D&semi;, &amp;#x0D;)
  213. &#x0E; CHANGED (&amp;&num;x0E&semi;, &amp;#x0E;)
  214. &#x1F; CHANGED (&amp;&num;x1F&semi;, &amp;#x1F;)
  215. &#x20; NOT CHANGED
  216. &#x7F; CHANGED (&amp;&num;x7F&semi;, &amp;#x7F;)
  217. &#x80; CHANGED (&amp;&num;x80&semi;, &amp;#x80;)
  218. &#x9F; CHANGED (&amp;&num;x9F&semi;, &amp;#x9F;)
  219. &#xA0; NOT CHANGED
  220. &#xD7FF; NOT CHANGED
  221. &#xD800; NOT CHANGED
  222. &#xDFFF; NOT CHANGED
  223. &#xE000; NOT CHANGED
  224. &#xFFFE; CHANGED (&amp;&num;xFFFE&semi;, &amp;#xFFFE;)
  225. &#xFFFF; CHANGED (&amp;&num;xFFFF&semi;, &amp;#xFFFF;)
  226. &#xFDCF; NOT CHANGED
  227. &#xFDD0; CHANGED (&amp;&num;xFDD0&semi;, &amp;#xFDD0;)
  228. &#xFDEF; CHANGED (&amp;&num;xFDEF&semi;, &amp;#xFDEF;)
  229. &#xFDF0; NOT CHANGED
  230. &#x2FFFE; CHANGED (&amp;&num;x2FFFE&semi;, &amp;#x2FFFE;)
  231. &#x2FFFF; CHANGED (&amp;&num;x2FFFF&semi;, &amp;#x2FFFF;)
  232. &#x110000; CHANGED (&amp;&num;x110000&semi;, &amp;#x110000;)
  233. *** Testing HTML 5 with another multibyte-byte encoding ***
  234. &#0; CHANGED
  235. &#1; CHANGED
  236. &#x09; NOT CHANGED
  237. &#x0A; NOT CHANGED
  238. &#x0B; CHANGED
  239. &#x0C; NOT CHANGED
  240. &#x0D; CHANGED
  241. &#x0E; CHANGED
  242. &#x1F; CHANGED
  243. &#x20; NOT CHANGED
  244. &#x7F; CHANGED
  245. &#x80; CHANGED
  246. &#x9F; CHANGED
  247. &#xA0; NOT CHANGED
  248. &#xD7FF; NOT CHANGED
  249. &#xD800; NOT CHANGED
  250. &#xDFFF; NOT CHANGED
  251. &#xE000; NOT CHANGED
  252. &#xFFFE; CHANGED
  253. &#xFFFF; CHANGED
  254. &#xFDCF; NOT CHANGED
  255. &#xFDD0; CHANGED
  256. &#xFDEF; CHANGED
  257. &#xFDF0; NOT CHANGED
  258. &#x2FFFE; CHANGED
  259. &#x2FFFF; CHANGED
  260. &#x110000; CHANGED