bug43841.phpt 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. --TEST--
  2. Test mb_strrpos() function : mb_strrpos offset is byte count for negative values
  3. --EXTENSIONS--
  4. mbstring
  5. --FILE--
  6. <?php
  7. /*
  8. * Test that mb_strrpos offset is byte count for negative values (should be character count)
  9. */
  10. $offsets = array(-25, -24, -13, -12);
  11. // Japanese string in UTF-8
  12. $string_mb = "日本語テキストです。0123456789。";
  13. $needle = "。";
  14. foreach ($offsets as $i) {
  15. echo "\n-- Offset is $i --\n";
  16. echo "Multibyte String:\n";
  17. try {
  18. var_dump( mb_strrpos($string_mb, $needle, $i, 'UTF-8') );
  19. } catch (\ValueError $e) {
  20. echo $e->getMessage() . \PHP_EOL;
  21. }
  22. echo "ASCII String:\n";
  23. echo "mb_strrpos:\n";
  24. try {
  25. var_dump(mb_strrpos('This is na English ta', 'a', $i));
  26. } catch (\ValueError $e) {
  27. echo $e->getMessage() . \PHP_EOL;
  28. }
  29. echo "strrpos:\n";
  30. try {
  31. var_dump(strrpos('This is na English ta', 'a', $i));
  32. } catch (\ValueError $e) {
  33. echo $e->getMessage() . \PHP_EOL;
  34. }
  35. }
  36. ?>
  37. --EXPECT--
  38. -- Offset is -25 --
  39. Multibyte String:
  40. mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
  41. ASCII String:
  42. mb_strrpos:
  43. mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
  44. strrpos:
  45. strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
  46. -- Offset is -24 --
  47. Multibyte String:
  48. mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
  49. ASCII String:
  50. mb_strrpos:
  51. mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
  52. strrpos:
  53. strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
  54. -- Offset is -13 --
  55. Multibyte String:
  56. bool(false)
  57. ASCII String:
  58. mb_strrpos:
  59. bool(false)
  60. strrpos:
  61. bool(false)
  62. -- Offset is -12 --
  63. Multibyte String:
  64. int(9)
  65. ASCII String:
  66. mb_strrpos:
  67. int(9)
  68. strrpos:
  69. int(9)