mb_strpos.phpt 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. --TEST--
  2. mb_strpos()
  3. --SKIPIF--
  4. <?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
  5. --FILE--
  6. <?php
  7. // TODO: Add more encodings
  8. //$debug=true;
  9. ini_set('include_path','.');
  10. include_once('common.inc');
  11. // Test string
  12. $euc_jp = b'0123この文字列は日本語です。EUC-JPを使っています。0123日本語は面倒臭い。';
  13. // EUC-JP - With encoding parameter
  14. mb_internal_encoding('UTF-8') or print("mb_internal_encoding() failed\n");
  15. echo "== POSITIVE OFFSET ==\n";
  16. print mb_strpos($euc_jp, b'日本語', 0, 'EUC-JP') . "\n";
  17. print mb_strpos($euc_jp, b'0', 0, 'EUC-JP') . "\n";
  18. print mb_strpos($euc_jp, 3, 0, 'EUC-JP') . "\n";
  19. print mb_strpos($euc_jp, 0, 0, 'EUC-JP') . "\n";
  20. print mb_strpos($euc_jp, b'日本語', 15, 'EUC-JP') . "\n";
  21. print mb_strpos($euc_jp, b'0', 15, 'EUC-JP') . "\n";
  22. print mb_strpos($euc_jp, 3, 15, 'EUC-JP') . "\n";
  23. print mb_strpos($euc_jp, 0, 15, 'EUC-JP') . "\n";
  24. // Negative offset
  25. // Note: PHP Warning - offset is negative.
  26. // Note: For offset(-15). It does not return position of latter string. (ie the same result as -50)
  27. echo "== NEGATIVE OFFSET ==\n";
  28. $r = mb_strpos($euc_jp, b'日本語', -15, 'EUC-JP');
  29. ($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
  30. $r = mb_strpos($euc_jp, b'0', -15, 'EUC-JP');
  31. ($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
  32. $r = mb_strpos($euc_jp, 3, -15, 'EUC-JP');
  33. ($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
  34. $r = mb_strpos($euc_jp, 0, -15, 'EUC-JP');
  35. ($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
  36. $r = mb_strpos($euc_jp, b'日本語', -50, 'EUC-JP');
  37. ($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
  38. $r = mb_strpos($euc_jp, b'0', -50, 'EUC-JP');
  39. ($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
  40. $r = mb_strpos($euc_jp, 3, -50, 'EUC-JP');
  41. ($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
  42. $r = mb_strpos($euc_jp, 0, -50, 'EUC-JP');
  43. ($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
  44. // Out of range - should return false
  45. print ("== OUT OF RANGE ==\n");
  46. $r = mb_strpos($euc_jp, b'日本語', 40, 'EUC-JP');
  47. ($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
  48. $r = mb_strpos($euc_jp, b'0', 40, 'EUC-JP');
  49. ($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
  50. $r = mb_strpos($euc_jp, 3, 40, 'EUC-JP');
  51. ($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
  52. $r = mb_strpos($euc_jp, 0, 40, 'EUC-JP');
  53. ($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
  54. // Note: Returned NULL string
  55. // echo gettype($r). ' val '. $r ."\n";
  56. // Non-existent
  57. echo "== NON-EXISTENT ==\n";
  58. $r = mb_strpos($euc_jp, b'韓国語', 0, 'EUC-JP');
  59. ($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n";
  60. $r = mb_strpos($euc_jp, b"\n", 0, 'EUC-JP');
  61. ($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n";
  62. // EUC-JP - No encoding parameter
  63. echo "== NO ENCODING PARAMETER ==\n";
  64. mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n");
  65. print mb_strpos($euc_jp, b'日本語', 0) . "\n";
  66. print mb_strpos($euc_jp, b'0', 0) . "\n";
  67. print mb_strpos($euc_jp, 3, 0) . "\n";
  68. print mb_strpos($euc_jp, 0, 0) . "\n";
  69. $r = mb_strpos($euc_jp, b'韓国語', 0);
  70. ($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n";
  71. $r = mb_strpos($euc_jp, b"\n", 0);
  72. ($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n";
  73. // EUC-JP - No offset and encoding parameter
  74. echo "== NO OFFSET AND ENCODING PARAMETER ==\n";
  75. mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n");
  76. print mb_strpos($euc_jp, b'日本語') . "\n";
  77. print mb_strpos($euc_jp, b'0') . "\n";
  78. print mb_strpos($euc_jp, 3) . "\n";
  79. print mb_strpos($euc_jp, 0) . "\n";
  80. $r = mb_strpos($euc_jp, b'韓国語');
  81. ($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n";
  82. $r = mb_strpos($euc_jp, b"\n");
  83. ($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n";
  84. // Invalid Parameters
  85. echo "== INVALID PARAMETER TEST ==\n";
  86. $r = mb_strpos($euc_jp,'','EUC-JP');
  87. ($r === FALSE) ? print("OK_NULL\n") : print("NG_NULL\n");
  88. $r = mb_strpos($euc_jp, $t_ary, 'EUC-JP');
  89. ($r === FALSE) ? print("OK_ARRAY\n") : print("NG_ARRAY\n");
  90. $r = mb_strpos($euc_jp, $t_obj, 'EUC-JP');
  91. ($r === FALSE) ? print("OK_OBJECT\n") : print("NG_OBJECT\n");
  92. $r = mb_strpos($euc_jp, $t_obj, 'BAD_ENCODING');
  93. ($r === FALSE) ? print("OK_BAD_ENCODING\n") : print("NG_BAD_ENCODING\n");
  94. ?>
  95. --EXPECT--
  96. == POSITIVE OFFSET ==
  97. 10
  98. 0
  99. 3
  100. 0
  101. 34
  102. 30
  103. 33
  104. 30
  105. == NEGATIVE OFFSET ==
  106. ERR: Warning
  107. OK_NEGATIVE_OFFSET
  108. ERR: Warning
  109. OK_NEGATIVE_OFFSET
  110. ERR: Warning
  111. OK_NEGATIVE_OFFSET
  112. ERR: Warning
  113. OK_NEGATIVE_OFFSET
  114. ERR: Warning
  115. OK_NEGATIVE_OFFSET
  116. ERR: Warning
  117. OK_NEGATIVE_OFFSET
  118. ERR: Warning
  119. OK_NEGATIVE_OFFSET
  120. ERR: Warning
  121. OK_NEGATIVE_OFFSET
  122. == OUT OF RANGE ==
  123. OK_OUT_RANGE
  124. OK_OUT_RANGE
  125. OK_OUT_RANGE
  126. OK_OUT_RANGE
  127. == NON-EXISTENT ==
  128. OK_STR
  129. OK_NEWLINE
  130. == NO ENCODING PARAMETER ==
  131. 10
  132. 0
  133. 3
  134. 0
  135. OK_STR
  136. OK_NEWLINE
  137. == NO OFFSET AND ENCODING PARAMETER ==
  138. 10
  139. 0
  140. 3
  141. 0
  142. OK_STR
  143. OK_NEWLINE
  144. == INVALID PARAMETER TEST ==
  145. ERR: Warning
  146. OK_NULL
  147. ERR: Warning
  148. OK_ARRAY
  149. ERR: Warning
  150. OK_OBJECT
  151. ERR: Warning
  152. OK_BAD_ENCODING