case MBFL_ERROR_NOT_FOUND:
break;
case MBFL_ERROR_ENCODING:
- php_error_docref(NULL, E_WARNING, "Unknown encoding or conversion error");
+ php_error_docref(NULL, E_WARNING, "Conversion error");
break;
case MBFL_ERROR_OFFSET:
- php_error_docref(NULL, E_WARNING, "Offset not contained in string");
+ zend_value_error("Offset not contained in string");
break;
default:
- php_error_docref(NULL, E_WARNING, "Unknown error in mb_strpos");
+ zend_value_error("Unknown error in mb_strpos");
break;
}
}
foreach($offsets as $i) {
echo "\n-- Offset is $i --\n";
echo "--Multibyte String:--\n";
- var_dump( mb_strpos($string_mb, $needle, $i, 'UTF-8') );
+ try {
+ var_dump( mb_strpos($string_mb, $needle, $i, 'UTF-8') );
+ } catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+ }
echo"--ASCII String:--\n";
- var_dump(mb_strpos('This is na English ta', 'a', $i));
+ try {
+ var_dump(mb_strpos('This is na English ta', 'a', $i));
+ } catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+ }
}
?>
---EXPECTF--
+--EXPECT--
-- Offset is 20 --
--Multibyte String:--
int(20)
-- Offset is 22 --
--Multibyte String:--
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
--ASCII String:--
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
-- Offset is 53 --
--Multibyte String:--
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
--ASCII String:--
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
-- Offset is 54 --
--Multibyte String:--
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
--ASCII String:--
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
*/
$offsets = array(-25, -24, -13, -12);
-$string_mb =
-base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvv
-JfvvJjvvJnjgII=');
-$needle = base64_decode('44CC');
+// Japanese string in UTF-8
+$string_mb = "日本語テキストです。0123456789。";
+$needle = "。";
foreach ($offsets as $i) {
echo "\n-- Offset is $i --\n";
echo "Multibyte String:\n";
- var_dump( mb_strrpos($string_mb, $needle, $i, 'UTF-8') );
+ try {
+ var_dump( mb_strrpos($string_mb, $needle, $i, 'UTF-8') );
+ } catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+ }
echo "ASCII String:\n";
echo "mb_strrpos:\n";
- var_dump(mb_strrpos('This is na English ta', 'a', $i));
+ try {
+ var_dump(mb_strrpos('This is na English ta', 'a', $i));
+ } catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+ }
echo "strrpos:\n";
try {
var_dump(strrpos('This is na English ta', 'a', $i));
- } catch (ValueError $exception) {
- echo $exception->getMessage() . "\n";
+ } catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
}
}
?>
---EXPECTF--
+--EXPECT--
-- Offset is -25 --
Multibyte String:
-
-Warning: mb_strrpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
ASCII String:
mb_strrpos:
-
-Warning: mb_strrpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
strrpos:
Offset not contained in string
-- Offset is -24 --
Multibyte String:
-
-Warning: mb_strrpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
ASCII String:
mb_strrpos:
-
-Warning: mb_strrpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
strrpos:
Offset not contained in string
function section($func, $haystack, $needle)
{
echo "\n------- $func -----------\n\n";
- foreach(array(0, 3, 6, 9, 11, 12, -1, -3, -6, -20) as $offset) {
+ foreach([0, 3, 6, 9, 11, 12, -1, -3, -6, -20] as $offset) {
echo "> Offset: $offset\n";
- try {
- var_dump($func($haystack,$needle,$offset));
- } catch (ValueError $exception) {
- echo $exception->getMessage() . "\n";
- }
+ try {
+ var_dump($func($haystack, $needle, $offset));
+ } catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+ }
}
}
section('strripos' , "abc abc abc" , "abc");
section('mb_strripos', "●○◆ ●○◆ ●○◆", "●○◆");
?>
---EXPECTF--
+--EXPECT--
------- strpos -----------
> Offset: 0
> Offset: 11
bool(false)
> Offset: 12
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
> Offset: -1
bool(false)
> Offset: -3
> Offset: -6
int(8)
> Offset: -20
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
------- stripos -----------
> Offset: 11
bool(false)
> Offset: 12
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
> Offset: -1
bool(false)
> Offset: -3
> Offset: -6
int(8)
> Offset: -20
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
------- strrpos -----------
> Offset: 11
bool(false)
> Offset: 12
-
-Warning: mb_strrpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
> Offset: -1
int(8)
> Offset: -3
> Offset: -6
int(4)
> Offset: -20
-
-Warning: mb_strrpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
------- strripos -----------
> Offset: 11
bool(false)
> Offset: 12
-
-Warning: mb_strripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
> Offset: -1
int(8)
> Offset: -3
> Offset: -6
int(4)
> Offset: -20
-
-Warning: mb_strripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
print mb_stripos($euc_jp, 0, -43, 'EUC-JP') . "\n";
-// Invalid offset - should return false with warning
-print ("== INVALID OFFSET ==\n");
-
-$r = mb_stripos($euc_jp, 'ÆüËܸì', 44, 'EUC-JP');
-($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
-$r = mb_stripos($euc_jp, 'ÆüËܸì', 50, 'EUC-JP');
-($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
-$r = mb_stripos($euc_jp, '0', 50, 'EUC-JP');
-($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
-$r = mb_stripos($euc_jp, 3, 50, 'EUC-JP');
-($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
-$r = mb_stripos($euc_jp, 0, 50, 'EUC-JP');
-($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
-$r = mb_stripos($euc_jp, 'ÆüËܸì', -50, 'EUC-JP');
-($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
-$r = mb_stripos($euc_jp, '0', -50, 'EUC-JP');
-($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
-$r = mb_stripos($euc_jp, 3, -50, 'EUC-JP');
-($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
-$r = mb_stripos($euc_jp, 0, -50, 'EUC-JP');
-($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
-$r = mb_stripos($euc_jp, 0, -44, 'EUC-JP');
-($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
-
// Out of range - should return false
print ("== OUT OF RANGE ==\n");
33
30
0
-== INVALID OFFSET ==
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-OK_INVALID_OFFSET
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-OK_INVALID_OFFSET
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-OK_INVALID_OFFSET
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-OK_INVALID_OFFSET
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-OK_INVALID_OFFSET
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-OK_INVALID_OFFSET
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-OK_INVALID_OFFSET
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-OK_INVALID_OFFSET
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-OK_INVALID_OFFSET
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-OK_INVALID_OFFSET
== OUT OF RANGE ==
OK_OUT_RANGE
OK_OUT_RANGE
var_dump(mb_stripos($string_ascii, '', -2));
echo "\n-- ASCII string with out of bound positive offset --\n";
-var_dump(mb_stripos($string_ascii, '', 150));
+try {
+ var_dump(mb_stripos($string_ascii, '', 150));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
echo "\n-- ASCII string with out of bound negative offset --\n";
-var_dump(mb_stripos($string_ascii, '', -150));
+try {
+ var_dump(mb_stripos($string_ascii, '', -150));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
echo "\n-- Multi-byte string without offset --\n";
var_dump(mb_stripos($string_mb, '', -2));
echo "\n-- Multi-byte string with out of bound positive offset --\n";
-var_dump(mb_stripos($string_mb, '', 150));
+try {
+ var_dump(mb_stripos($string_mb, '', 150));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
echo "\n-- Multi-byte string with out of bound negative offset --\n";
-var_dump(mb_stripos($string_mb, '', -150));
+try {
+ var_dump(mb_stripos($string_mb, '', -150));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
?>
---EXPECTF--
+--EXPECT--
-- ASCII string without offset --
int(0)
int(5)
-- ASCII string with out of bound positive offset --
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
-- ASCII string with out of bound negative offset --
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
-- Multi-byte string without offset --
int(0)
int(19)
-- Multi-byte string with out of bound positive offset --
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
-- Multi-byte string with out of bound negative offset --
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
--- /dev/null
+--TEST--
+mb_stripos() with invalid offsets
+--SKIPIF--
+<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
+--FILE--
+<?php
+
+ini_set('include_path','.');
+include_once('common.inc');
+mb_internal_encoding('UTF-8') or print("mb_internal_encoding() failed\n");
+
+// Test string
+$string = '0123この文字列は日本語です。UTF-8を使っています。0123日本語は面倒臭い。';
+
+$slen = mb_strlen($string);
+echo "String len: $slen\n";
+
+print ("== INVALID OFFSET ==\n");
+
+try {
+ var_dump( mb_stripos($string, '日本語', 44));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
+try {
+ var_dump( mb_stripos($string, '日本語', 50));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
+try {
+ var_dump( mb_stripos($string, '0', 50));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
+try {
+ var_dump(mb_stripos($string, 3, 50));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
+try {
+ var_dump(mb_stripos($string, 0, 50));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
+try {
+ var_dump(mb_stripos($string, '日本語', -50));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
+try {
+ var_dump(mb_stripos($string, '0', -50));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
+try {
+ var_dump(mb_stripos($string, 3, -50));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
+try {
+ var_dump(mb_stripos($string, 0, -50));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
+try {
+ var_dump(mb_stripos($string, 0, -44));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
+?>
+--EXPECT--
+String len: 42
+== INVALID OFFSET ==
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
for ($i = -30; $i <= 60; $i += 10) {
echo "\n**-- Offset is: $i --**\n";
echo "-- ASCII String --\n";
- var_dump(mb_stripos($string_ascii, $needle_ascii, $i));
+ try {
+ var_dump(mb_stripos($string_ascii, $needle_ascii, $i));
+ } catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+ }
echo "--Multibyte String --\n";
- var_dump(mb_stripos($string_mb, $needle_mb, $i, 'UTF-8'));
+ try {
+ var_dump(mb_stripos($string_mb, $needle_mb, $i, 'UTF-8'));
+ } catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+ }
}
-echo "Done";
?>
---EXPECTF--
+--EXPECT--
*** Testing mb_stripos() : usage variations ***
**-- Offset is: -30 --**
-- ASCII String --
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
--Multibyte String --
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
**-- Offset is: -20 --**
-- ASCII String --
**-- Offset is: 30 --**
-- ASCII String --
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
--Multibyte String --
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
**-- Offset is: 40 --**
-- ASCII String --
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
--Multibyte String --
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
**-- Offset is: 50 --**
-- ASCII String --
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
--Multibyte String --
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
**-- Offset is: 60 --**
-- ASCII String --
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
--Multibyte String --
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-bool(false)
-Done
+Offset not contained in string
print mb_strpos($euc_jp, 0, -43, 'EUC-JP') . "\n";
-// Invalid offset - should return false with warning
-print ("== INVALID OFFSET ==\n");
-
-$r = mb_strpos($euc_jp, 'ÆüËܸì', 44, 'EUC-JP');
-($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
-$r = mb_strpos($euc_jp, 'ÆüËܸì', 50, 'EUC-JP');
-($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
-$r = mb_strpos($euc_jp, '0', 50, 'EUC-JP');
-($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
-$r = mb_strpos($euc_jp, 3, 50, 'EUC-JP');
-($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
-$r = mb_strpos($euc_jp, 0, 50, 'EUC-JP');
-($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
-$r = mb_strpos($euc_jp, 'ÆüËܸì', -50, 'EUC-JP');
-($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
-$r = mb_strpos($euc_jp, '0', -50, 'EUC-JP');
-($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
-$r = mb_strpos($euc_jp, 3, -50, 'EUC-JP');
-($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
-$r = mb_strpos($euc_jp, 0, -50, 'EUC-JP');
-($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
-$r = mb_strpos($euc_jp, 0, -44, 'EUC-JP');
-($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
-
-// Out of range - should return false
-print ("== OUT OF RANGE ==\n");
-
-$r = mb_strpos($euc_jp, 'ÆüËܸì', 40, 'EUC-JP');
-($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
-$r = mb_strpos($euc_jp, '0', 40, 'EUC-JP');
-($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
-$r = mb_strpos($euc_jp, 3, 40, 'EUC-JP');
-($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
-$r = mb_strpos($euc_jp, 0, 40, 'EUC-JP');
-($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
-$r = mb_strpos($euc_jp, 'ÆüËܸì', -3, 'EUC-JP');
-($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
-$r = mb_strpos($euc_jp, '0', -3, 'EUC-JP');
-($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
-$r = mb_strpos($euc_jp, 3, -3, 'EUC-JP');
-($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
-$r = mb_strpos($euc_jp, 0, -3, 'EUC-JP');
-($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
-
-
// Non-existent
echo "== NON-EXISTENT ==\n";
($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n";
?>
---EXPECTF--
+--EXPECT--
String len: 43
== POSITIVE OFFSET ==
10
33
30
0
-== INVALID OFFSET ==
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-OK_INVALID_OFFSET
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-OK_INVALID_OFFSET
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-OK_INVALID_OFFSET
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-OK_INVALID_OFFSET
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-OK_INVALID_OFFSET
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-OK_INVALID_OFFSET
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-OK_INVALID_OFFSET
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-OK_INVALID_OFFSET
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-OK_INVALID_OFFSET
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-OK_INVALID_OFFSET
-== OUT OF RANGE ==
-OK_OUT_RANGE
-OK_OUT_RANGE
-OK_OUT_RANGE
-OK_OUT_RANGE
-OK_OUT_RANGE
-OK_OUT_RANGE
-OK_OUT_RANGE
-OK_OUT_RANGE
== NON-EXISTENT ==
OK_STR
OK_NEWLINE
var_dump(mb_strpos($string_ascii, '', -2));
echo "\n-- ASCII string with out of bound positive offset --\n";
-var_dump(mb_strpos($string_ascii, '', 15));
+try {
+ var_dump(mb_strpos($string_ascii, '', 15));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
echo "\n-- ASCII string with out of bound negative offset --\n";
-var_dump(mb_strpos($string_ascii, '', -15));
-
+try {
+ var_dump(mb_strpos($string_ascii, '', -15));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
echo "\n-- Multi-byte string without offset --\n";
var_dump(mb_strpos($string_mb, ''));
var_dump(mb_strpos($string_mb, '', -2));
echo "\n-- Multi-byte string with out of bound positive offset --\n";
-var_dump(mb_strpos($string_mb, '', 150));
+try {
+ var_dump(mb_strpos($string_mb, '', 150));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
echo "\n-- Multi-byte string with out of bound negative offset --\n";
-var_dump(mb_strpos($string_mb, '', -150));
+try {
+ var_dump(mb_strpos($string_mb, '', -150));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
?>
---EXPECTF--
+--EXPECT--
-- ASCII string without offset --
int(0)
int(5)
-- ASCII string with out of bound positive offset --
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
-- ASCII string with out of bound negative offset --
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
-- Multi-byte string without offset --
int(0)
int(19)
-- Multi-byte string with out of bound positive offset --
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
-- Multi-byte string with out of bound negative offset --
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
--- /dev/null
+--TEST--
+mb_strpos() with invalid offsets
+--SKIPIF--
+<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
+--FILE--
+<?php
+
+ini_set('include_path','.');
+include_once('common.inc');
+mb_internal_encoding('UTF-8') or print("mb_internal_encoding() failed\n");
+
+// Test string
+$string = '0123この文字列は日本語です。UTF-8を使っています。0123日本語は面倒臭い。';
+
+$slen = mb_strlen($string);
+echo "String len: $slen\n";
+
+print ("== INVALID OFFSET ==\n");
+
+try {
+ var_dump( mb_strpos($string, '日本語', 44));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
+try {
+ var_dump( mb_strpos($string, '日本語', 50));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
+try {
+ var_dump( mb_strpos($string, '0', 50));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
+try {
+ var_dump(mb_strpos($string, 3, 50));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
+try {
+ var_dump(mb_strpos($string, 0, 50));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
+try {
+ var_dump(mb_strpos($string, '日本語', -50));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
+try {
+ var_dump(mb_strpos($string, '0', -50));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
+try {
+ var_dump(mb_strpos($string, 3, -50));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
+try {
+ var_dump(mb_strpos($string, 0, -50));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
+try {
+ var_dump(mb_strpos($string, 0, -44));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
+?>
+--EXPECT--
+String len: 42
+== INVALID OFFSET ==
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
--FILE--
<?php
-var_dump(mb_strpos("f", "bar", 3));
-var_dump(mb_strpos("f", "bar", -3));
-var_dump(mb_strrpos("f", "bar", 3));
-var_dump(mb_strrpos("f", "bar", -3));
-var_dump(mb_stripos("f", "bar", 3));
-var_dump(mb_stripos("f", "bar", -3));
-var_dump(mb_strripos("f", "bar", 3));
-var_dump(mb_strripos("f", "bar", -3));
+try {
+ var_dump(mb_strpos("f", "bar", 3));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+try {
+ var_dump(mb_strpos("f", "bar", -3));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+try {
+ var_dump(mb_strrpos("f", "bar", 3));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+try {
+ var_dump(mb_strrpos("f", "bar", -3));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+try {
+ var_dump(mb_stripos("f", "bar", 3));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+try {
+ var_dump(mb_stripos("f", "bar", -3));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+try {
+ var_dump(mb_strripos("f", "bar", 3));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+try {
+ var_dump(mb_strripos("f", "bar", -3));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
?>
---EXPECTF--
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
-
-Warning: mb_strrpos(): Offset not contained in string in %s on line %d
-bool(false)
-
-Warning: mb_strrpos(): Offset not contained in string in %s on line %d
-bool(false)
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-bool(false)
-
-Warning: mb_stripos(): Offset not contained in string in %s on line %d
-bool(false)
-
-Warning: mb_strripos(): Offset not contained in string in %s on line %d
-bool(false)
-
-Warning: mb_strripos(): Offset not contained in string in %s on line %d
-bool(false)
+--EXPECT--
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
+Offset not contained in string
/*
* Loop through integers as multiples of ten for $offset argument
- * mb_strpos should not be able to accept negative values as $offset.
* 60 is larger than *BYTE* count for $string_mb
*/
for ($i = -30; $i <= 60; $i += 10) {
echo "\n**-- Offset is: $i --**\n";
echo "-- ASCII String --\n";
- var_dump(mb_strpos($string_ascii, $needle_ascii, $i));
+ try {
+ var_dump(mb_strpos($string_ascii, $needle_ascii, $i));
+ } catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+ }
+
echo "--Multibyte String --\n";
- var_dump(mb_strpos($string_mb, $needle_mb, $i, 'UTF-8'));
+ try {
+ var_dump(mb_strpos($string_mb, $needle_mb, $i, 'UTF-8'));
+ } catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+ }
}
-echo "Done";
?>
---EXPECTF--
+--EXPECT--
*** Testing mb_strpos() : usage variations ***
**-- Offset is: -30 --**
-- ASCII String --
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
--Multibyte String --
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
**-- Offset is: -20 --**
-- ASCII String --
**-- Offset is: 30 --**
-- ASCII String --
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
--Multibyte String --
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
**-- Offset is: 40 --**
-- ASCII String --
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
--Multibyte String --
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
**-- Offset is: 50 --**
-- ASCII String --
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
--Multibyte String --
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
**-- Offset is: 60 --**
-- ASCII String --
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
--Multibyte String --
-
-Warning: mb_strpos(): Offset not contained in string in %s on line %d
-bool(false)
-Done
+Offset not contained in string
var_dump(mb_strripos($string_ascii, '', -2));
echo "\n-- ASCII string with out of bound positive offset --\n";
-var_dump(mb_strripos($string_ascii, '', 15));
+try {
+ var_dump(mb_strripos($string_ascii, '', 15));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
echo "\n-- ASCII string with out of bound negative offset --\n";
-var_dump(mb_strripos($string_ascii, '', -15));
+try {
+ var_dump(mb_strripos($string_ascii, '', -15));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
echo "\n-- Multi-byte string without offset --\n";
var_dump(mb_strripos($string_mb, '', -2));
echo "\n-- Multi-byte string with out of bound positive offset --\n";
-var_dump(mb_strripos($string_mb, '', 150));
+try {
+ var_dump(mb_strripos($string_mb, '', 150));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
echo "\n-- Multi-byte string with out of bound negative offset --\n";
-var_dump(mb_strripos($string_mb, '', -150));
+try {
+ var_dump(mb_strripos($string_mb, '', -150));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
?>
---EXPECTF--
+--EXPECT--
-- ASCII string without offset --
int(7)
int(5)
-- ASCII string with out of bound positive offset --
-
-Warning: mb_strripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
-- ASCII string with out of bound negative offset --
-
-Warning: mb_strripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
-- Multi-byte string without offset --
int(21)
int(19)
-- Multi-byte string with out of bound positive offset --
-
-Warning: mb_strripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
-- Multi-byte string with out of bound negative offset --
-
-Warning: mb_strripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
for ($i = -10; $i <= 60; $i += 10) {
echo "\n**-- Offset is: $i --**\n";
echo "-- ASCII String --\n";
- var_dump(mb_strripos($string_ascii, $needle_ascii, $i));
+ try {
+ var_dump(mb_strripos($string_ascii, $needle_ascii, $i));
+ } catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+ }
+
echo "--Multibyte String --\n";
- var_dump(mb_strripos($string_mb, $needle_mb, $i, 'UTF-8'));
+ try {
+ var_dump(mb_strripos($string_mb, $needle_mb, $i, 'UTF-8'));
+ } catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+ }
}
-echo "Done";
?>
---EXPECTF--
+--EXPECT--
*** Testing mb_strripos() : usage variations ***
**-- Offset is: -10 --**
**-- Offset is: 30 --**
-- ASCII String --
-
-Warning: mb_strripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
--Multibyte String --
-
-Warning: mb_strripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
**-- Offset is: 40 --**
-- ASCII String --
-
-Warning: mb_strripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
--Multibyte String --
-
-Warning: mb_strripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
**-- Offset is: 50 --**
-- ASCII String --
-
-Warning: mb_strripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
--Multibyte String --
-
-Warning: mb_strripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
**-- Offset is: 60 --**
-- ASCII String --
-
-Warning: mb_strripos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
--Multibyte String --
-
-Warning: mb_strripos(): Offset not contained in string in %s on line %d
-bool(false)
-Done
+Offset not contained in string
var_dump(mb_strrpos($string_ascii, '', -2));
echo "\n-- ASCII string with out of bound positive offset --\n";
-var_dump(mb_strrpos($string_ascii, '', 15));
+try {
+ var_dump(mb_strrpos($string_ascii, '', 15));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
echo "\n-- ASCII string with out of bound negative offset --\n";
-var_dump(mb_strrpos($string_ascii, '', -15));
+try {
+ var_dump(mb_strrpos($string_ascii, '', -15));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
echo "\n-- Multi-byte string without offset --\n";
var_dump(mb_strrpos($string_mb, '', -2));
echo "\n-- Multi-byte string with out of bound positive offset --\n";
-var_dump(mb_strrpos($string_mb, '', 150));
+try {
+ var_dump(mb_strrpos($string_mb, '', 150));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
echo "\n-- Multi-byte string with out of bound negative offset --\n";
-var_dump(mb_strrpos($string_mb, '', -150));
+try {
+ var_dump(mb_strrpos($string_mb, '', -150));
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
?>
---EXPECTF--
+--EXPECT--
-- ASCII string without offset --
int(7)
int(5)
-- ASCII string with out of bound positive offset --
-
-Warning: mb_strrpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
-- ASCII string with out of bound negative offset --
-
-Warning: mb_strrpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
-- Multi-byte string without offset --
int(21)
int(19)
-- Multi-byte string with out of bound positive offset --
-
-Warning: mb_strrpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string
-- Multi-byte string with out of bound negative offset --
-
-Warning: mb_strrpos(): Offset not contained in string in %s on line %d
-bool(false)
+Offset not contained in string