mb_strpos.phpt 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  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 = '0123この文字列は日本語です。EUC-JPを使っています。0123日本語は面倒臭い。';
  13. $slen = mb_strlen($euc_jp, 'EUC-JP');
  14. echo "String len: $slen\n";
  15. // EUC-JP - With encoding parameter
  16. mb_internal_encoding('UTF-8') or print("mb_internal_encoding() failed\n");
  17. echo "== POSITIVE OFFSET ==\n";
  18. print mb_strpos($euc_jp, '日本語', 0, 'EUC-JP') . "\n";
  19. print mb_strpos($euc_jp, '0', 0, 'EUC-JP') . "\n";
  20. print mb_strpos($euc_jp, 3, 0, 'EUC-JP') . "\n";
  21. print mb_strpos($euc_jp, 0, 0, 'EUC-JP') . "\n";
  22. print mb_strpos($euc_jp, '日本語', 15, 'EUC-JP') . "\n";
  23. print mb_strpos($euc_jp, '0', 15, 'EUC-JP') . "\n";
  24. print mb_strpos($euc_jp, 3, 15, 'EUC-JP') . "\n";
  25. print mb_strpos($euc_jp, 0, 15, 'EUC-JP') . "\n";
  26. // Negative offset
  27. echo "== NEGATIVE OFFSET ==\n";
  28. print mb_strpos($euc_jp, '日本語', -15, 'EUC-JP') . "\n";
  29. print mb_strpos($euc_jp, '0', -15, 'EUC-JP') . "\n";
  30. print mb_strpos($euc_jp, 3, -15, 'EUC-JP') . "\n";
  31. print mb_strpos($euc_jp, 0, -15, 'EUC-JP') . "\n";
  32. print mb_strpos($euc_jp, 0, -43, 'EUC-JP') . "\n";
  33. // Invalid offset - should return false with warning
  34. print ("== INVALID OFFSET ==\n");
  35. $r = mb_strpos($euc_jp, '日本語', 44, 'EUC-JP');
  36. ($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
  37. $r = mb_strpos($euc_jp, '日本語', 50, 'EUC-JP');
  38. ($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
  39. $r = mb_strpos($euc_jp, '0', 50, 'EUC-JP');
  40. ($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
  41. $r = mb_strpos($euc_jp, 3, 50, 'EUC-JP');
  42. ($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
  43. $r = mb_strpos($euc_jp, 0, 50, 'EUC-JP');
  44. ($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
  45. $r = mb_strpos($euc_jp, '日本語', -50, 'EUC-JP');
  46. ($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
  47. $r = mb_strpos($euc_jp, '0', -50, 'EUC-JP');
  48. ($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
  49. $r = mb_strpos($euc_jp, 3, -50, 'EUC-JP');
  50. ($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
  51. $r = mb_strpos($euc_jp, 0, -50, 'EUC-JP');
  52. ($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
  53. $r = mb_strpos($euc_jp, 0, -44, 'EUC-JP');
  54. ($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
  55. // Out of range - should return false
  56. print ("== OUT OF RANGE ==\n");
  57. $r = mb_strpos($euc_jp, '日本語', 40, 'EUC-JP');
  58. ($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
  59. $r = mb_strpos($euc_jp, '0', 40, 'EUC-JP');
  60. ($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
  61. $r = mb_strpos($euc_jp, 3, 40, 'EUC-JP');
  62. ($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
  63. $r = mb_strpos($euc_jp, 0, 40, 'EUC-JP');
  64. ($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
  65. $r = mb_strpos($euc_jp, '日本語', -3, 'EUC-JP');
  66. ($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
  67. $r = mb_strpos($euc_jp, '0', -3, 'EUC-JP');
  68. ($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
  69. $r = mb_strpos($euc_jp, 3, -3, 'EUC-JP');
  70. ($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
  71. $r = mb_strpos($euc_jp, 0, -3, 'EUC-JP');
  72. ($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
  73. // Non-existent
  74. echo "== NON-EXISTENT ==\n";
  75. $r = mb_strpos($euc_jp, '韓国語', 0, 'EUC-JP');
  76. ($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n";
  77. $r = mb_strpos($euc_jp, "\n", 0, 'EUC-JP');
  78. ($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n";
  79. // EUC-JP - No encoding parameter
  80. echo "== NO ENCODING PARAMETER ==\n";
  81. mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n");
  82. print mb_strpos($euc_jp, '日本語', 0) . "\n";
  83. print mb_strpos($euc_jp, '0', 0) . "\n";
  84. print mb_strpos($euc_jp, 3, 0) . "\n";
  85. print mb_strpos($euc_jp, 0, 0) . "\n";
  86. $r = mb_strpos($euc_jp, '韓国語', 0);
  87. ($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n";
  88. $r = mb_strpos($euc_jp, "\n", 0);
  89. ($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n";
  90. // EUC-JP - No offset and encoding parameter
  91. echo "== NO OFFSET AND ENCODING PARAMETER ==\n";
  92. mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n");
  93. print mb_strpos($euc_jp, '日本語') . "\n";
  94. print mb_strpos($euc_jp, '0') . "\n";
  95. print mb_strpos($euc_jp, 3) . "\n";
  96. print mb_strpos($euc_jp, 0) . "\n";
  97. $r = mb_strpos($euc_jp, '韓国語');
  98. ($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n";
  99. $r = mb_strpos($euc_jp, "\n");
  100. ($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n";
  101. // Invalid Parameters
  102. echo "== INVALID PARAMETER TEST ==\n";
  103. $r = mb_strpos($euc_jp,'','EUC-JP');
  104. ($r === NULL) ? print("OK_NULL\n") : print("NG_NULL\n");
  105. $r = mb_strpos($euc_jp, $t_ary, 'EUC-JP');
  106. ($r === NULL) ? print("OK_ARRAY\n") : print("NG_ARRAY\n");
  107. $r = mb_strpos($euc_jp, $t_obj, 'EUC-JP');
  108. ($r === NULL) ? print("OK_OBJECT\n") : print("NG_OBJECT\n");
  109. $r = mb_strpos($euc_jp, $t_obj, 'BAD_ENCODING');
  110. ($r === NULL) ? print("OK_BAD_ENCODING\n") : print("NG_BAD_ENCODING\n");
  111. ?>
  112. ==DONE==
  113. --EXPECT--
  114. String len: 43
  115. == POSITIVE OFFSET ==
  116. 10
  117. 0
  118. 3
  119. 0
  120. 34
  121. 30
  122. 33
  123. 30
  124. == NEGATIVE OFFSET ==
  125. 34
  126. 30
  127. 33
  128. 30
  129. 0
  130. == INVALID OFFSET ==
  131. ERR: Warning
  132. OK_INVALID_OFFSET
  133. ERR: Warning
  134. OK_INVALID_OFFSET
  135. ERR: Warning
  136. OK_INVALID_OFFSET
  137. ERR: Warning
  138. OK_INVALID_OFFSET
  139. ERR: Warning
  140. OK_INVALID_OFFSET
  141. ERR: Warning
  142. OK_INVALID_OFFSET
  143. ERR: Warning
  144. OK_INVALID_OFFSET
  145. ERR: Warning
  146. OK_INVALID_OFFSET
  147. ERR: Warning
  148. OK_INVALID_OFFSET
  149. ERR: Warning
  150. OK_INVALID_OFFSET
  151. == OUT OF RANGE ==
  152. OK_OUT_RANGE
  153. OK_OUT_RANGE
  154. OK_OUT_RANGE
  155. OK_OUT_RANGE
  156. OK_OUT_RANGE
  157. OK_OUT_RANGE
  158. OK_OUT_RANGE
  159. OK_OUT_RANGE
  160. == NON-EXISTENT ==
  161. OK_STR
  162. OK_NEWLINE
  163. == NO ENCODING PARAMETER ==
  164. 10
  165. 0
  166. 3
  167. 0
  168. OK_STR
  169. OK_NEWLINE
  170. == NO OFFSET AND ENCODING PARAMETER ==
  171. 10
  172. 0
  173. 3
  174. 0
  175. OK_STR
  176. OK_NEWLINE
  177. == INVALID PARAMETER TEST ==
  178. ERR: Warning
  179. OK_NULL
  180. ERR: Warning
  181. OK_ARRAY
  182. ERR: Warning
  183. OK_OBJECT
  184. ERR: Warning
  185. OK_BAD_ENCODING
  186. ==DONE==