bug54494.phpt 1004 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. --TEST--
  2. Bug #54494: mb_substr() mishandles UTF-32LE and UCS-2LE
  3. --EXTENSIONS--
  4. mbstring
  5. --FILE--
  6. <?php
  7. //declare(encoding = 'UTF-8');
  8. mb_internal_encoding('UTF-8');
  9. header('Content-Type: text/plain; charset=UTF-32LE');
  10. $stringOr = "hällö wörld\n";
  11. $mode = "UTF-32LE";
  12. echo "$mode:\n";
  13. $string = mb_convert_encoding($stringOr, $mode);
  14. $length = mb_strlen($string, $mode);
  15. echo "Length: ", $length, "\n";
  16. for ($i=0; $i < $length; $i++) {
  17. $t = unpack("H*",mb_substr($string, $i, 1, $mode));
  18. echo $t[1];
  19. }
  20. echo "\n";
  21. $mode = "UCS-2LE";
  22. echo "$mode:\n";
  23. $string = mb_convert_encoding($stringOr, $mode);
  24. $length = mb_strlen($string, $mode);
  25. echo "Length: ", $length, "\n";
  26. for ($i=0; $i < $length; $i++) {
  27. $t = unpack("H*",mb_substr($string, $i, 1, $mode));
  28. echo $t[1];
  29. }
  30. echo "\n";
  31. ?>
  32. --EXPECT--
  33. UTF-32LE:
  34. Length: 12
  35. 68000000e40000006c0000006c000000f60000002000000077000000f6000000720000006c000000640000000a000000
  36. UCS-2LE:
  37. Length: 12
  38. 6800e4006c006c00f60020007700f60072006c0064000a00