Replaces part of a string with another string */
PHP_FUNCTION(substr_replace)
{
- zval *str;
+ zend_string *str, *repl_str;
+ HashTable *str_ht, *repl_ht;
zval *from;
zval *len = NULL;
- zval *repl;
zend_long l = 0;
zend_long f;
int argc = ZEND_NUM_ARGS();
zend_string *result;
HashPosition from_idx, repl_idx, len_idx;
- zval *tmp_str = NULL, *tmp_from = NULL, *tmp_repl = NULL, *tmp_len= NULL;
+ zval *tmp_str = NULL, *tmp_repl, *tmp_from = NULL, *tmp_len= NULL;
ZEND_PARSE_PARAMETERS_START(3, 4)
- Z_PARAM_ZVAL(str)
- Z_PARAM_ZVAL(repl)
+ Z_PARAM_STR_OR_ARRAY_HT(str, str_ht)
+ Z_PARAM_STR_OR_ARRAY_HT(repl_str, repl_ht)
Z_PARAM_ZVAL(from)
Z_PARAM_OPTIONAL
Z_PARAM_ZVAL(len)
ZEND_PARSE_PARAMETERS_END();
- if (Z_TYPE_P(str) != IS_ARRAY) {
- convert_to_string_ex(str);
- }
- if (Z_TYPE_P(repl) != IS_ARRAY) {
- convert_to_string_ex(repl);
- }
if (Z_TYPE_P(from) != IS_ARRAY) {
convert_to_long_ex(from);
- }
-
- if (EG(exception)) {
- return;
+ if (EG(exception)) {
+ return;
+ }
}
if (argc > 3) {
l = Z_LVAL_P(len);
}
} else {
- if (Z_TYPE_P(str) != IS_ARRAY) {
- l = Z_STRLEN_P(str);
+ if (str) {
+ l = ZSTR_LEN(str);
}
}
- if (Z_TYPE_P(str) == IS_STRING) {
+ if (str) {
if (
(argc == 3 && Z_TYPE_P(from) == IS_ARRAY) ||
(argc == 4 && Z_TYPE_P(from) != Z_TYPE_P(len))
) {
php_error_docref(NULL, E_WARNING, "'start' and 'length' should be of same type - numerical or array ");
- RETURN_STR_COPY(Z_STR_P(str));
+ RETURN_STR_COPY(str);
}
if (argc == 4 && Z_TYPE_P(from) == IS_ARRAY) {
if (zend_hash_num_elements(Z_ARRVAL_P(from)) != zend_hash_num_elements(Z_ARRVAL_P(len))) {
php_error_docref(NULL, E_WARNING, "'start' and 'length' should have the same number of elements");
- RETURN_STR_COPY(Z_STR_P(str));
+ RETURN_STR_COPY(str);
}
}
}
- if (Z_TYPE_P(str) != IS_ARRAY) {
+ if (str) {
if (Z_TYPE_P(from) != IS_ARRAY) {
- zend_string *repl_str;
- zend_string *tmp_repl_str = NULL;
f = Z_LVAL_P(from);
/* if "from" position is negative, count start position from the end
* of the string
*/
if (f < 0) {
- f = (zend_long)Z_STRLEN_P(str) + f;
+ f = (zend_long)ZSTR_LEN(str) + f;
if (f < 0) {
f = 0;
}
- } else if ((size_t)f > Z_STRLEN_P(str)) {
- f = Z_STRLEN_P(str);
+ } else if ((size_t)f > ZSTR_LEN(str)) {
+ f = ZSTR_LEN(str);
}
/* if "length" position is negative, set it to the length
* needed to stop that many chars from the end of the string
*/
if (l < 0) {
- l = ((zend_long)Z_STRLEN_P(str) - f) + l;
+ l = ((zend_long)ZSTR_LEN(str) - f) + l;
if (l < 0) {
l = 0;
}
}
- if ((size_t)l > Z_STRLEN_P(str) || (l < 0 && (size_t)(-l) > Z_STRLEN_P(str))) {
- l = Z_STRLEN_P(str);
+ if ((size_t)l > ZSTR_LEN(str) || (l < 0 && (size_t)(-l) > ZSTR_LEN(str))) {
+ l = ZSTR_LEN(str);
}
- if ((f + l) > (zend_long)Z_STRLEN_P(str)) {
- l = Z_STRLEN_P(str) - f;
+ if ((f + l) > (zend_long)ZSTR_LEN(str)) {
+ l = ZSTR_LEN(str) - f;
}
- if (Z_TYPE_P(repl) == IS_ARRAY) {
+
+ zend_string *tmp_repl_str = NULL;
+ if (repl_ht) {
repl_idx = 0;
- while (repl_idx < Z_ARRVAL_P(repl)->nNumUsed) {
- tmp_repl = &Z_ARRVAL_P(repl)->arData[repl_idx].val;
+ while (repl_idx < repl_ht->nNumUsed) {
+ tmp_repl = &repl_ht->arData[repl_idx].val;
if (Z_TYPE_P(tmp_repl) != IS_UNDEF) {
break;
}
repl_idx++;
}
- if (repl_idx < Z_ARRVAL_P(repl)->nNumUsed) {
+ if (repl_idx < repl_ht->nNumUsed) {
repl_str = zval_get_tmp_string(tmp_repl, &tmp_repl_str);
} else {
repl_str = STR_EMPTY_ALLOC();
}
- } else {
- repl_str = Z_STR_P(repl);
}
- result = zend_string_safe_alloc(1, Z_STRLEN_P(str) - l + ZSTR_LEN(repl_str), 0, 0);
+ result = zend_string_safe_alloc(1, ZSTR_LEN(str) - l + ZSTR_LEN(repl_str), 0, 0);
- memcpy(ZSTR_VAL(result), Z_STRVAL_P(str), f);
+ memcpy(ZSTR_VAL(result), ZSTR_VAL(str), f);
if (ZSTR_LEN(repl_str)) {
memcpy((ZSTR_VAL(result) + f), ZSTR_VAL(repl_str), ZSTR_LEN(repl_str));
}
- memcpy((ZSTR_VAL(result) + f + ZSTR_LEN(repl_str)), Z_STRVAL_P(str) + f + l, Z_STRLEN_P(str) - f - l);
+ memcpy((ZSTR_VAL(result) + f + ZSTR_LEN(repl_str)), ZSTR_VAL(str) + f + l, ZSTR_LEN(str) - f - l);
ZSTR_VAL(result)[ZSTR_LEN(result)] = '\0';
zend_tmp_string_release(tmp_repl_str);
RETURN_NEW_STR(result);
} else {
php_error_docref(NULL, E_WARNING, "Functionality of 'start' and 'length' as arrays is not implemented");
- RETURN_STR_COPY(Z_STR_P(str));
+ RETURN_STR_COPY(str);
}
} else { /* str is array of strings */
zend_string *str_index = NULL;
from_idx = len_idx = repl_idx = 0;
- ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(str), num_index, str_index, tmp_str) {
+ ZEND_HASH_FOREACH_KEY_VAL(str_ht, num_index, str_index, tmp_str) {
zend_string *tmp_orig_str;
zend_string *orig_str = zval_get_tmp_string(tmp_str, &tmp_orig_str);
result_len = ZSTR_LEN(orig_str) - l;
- if (Z_TYPE_P(repl) == IS_ARRAY) {
- while (repl_idx < Z_ARRVAL_P(repl)->nNumUsed) {
- tmp_repl = &Z_ARRVAL_P(repl)->arData[repl_idx].val;
- if (Z_TYPE_P(tmp_repl) != IS_UNDEF) {
+ if (repl_ht) {
+ while (repl_idx < repl_ht->nNumUsed) {
+ tmp_repl = &repl_ht->arData[repl_idx].val;
+ if (repl_ht != IS_UNDEF) {
break;
}
repl_idx++;
}
- if (repl_idx < Z_ARRVAL_P(repl)->nNumUsed) {
+ if (repl_idx < repl_ht->nNumUsed) {
zend_string *tmp_repl_str;
zend_string *repl_str = zval_get_tmp_string(tmp_repl, &tmp_repl_str);
memcpy((ZSTR_VAL(result) + f), ZSTR_VAL(orig_str) + f + l, ZSTR_LEN(orig_str) - f - l);
}
} else {
- result_len += Z_STRLEN_P(repl);
+ result_len += ZSTR_LEN(repl_str);
result = zend_string_safe_alloc(1, result_len, 0, 0);
memcpy(ZSTR_VAL(result), ZSTR_VAL(orig_str), f);
- memcpy((ZSTR_VAL(result) + f), Z_STRVAL_P(repl), Z_STRLEN_P(repl));
- memcpy((ZSTR_VAL(result) + f + Z_STRLEN_P(repl)), ZSTR_VAL(orig_str) + f + l, ZSTR_LEN(orig_str) - f - l);
+ memcpy((ZSTR_VAL(result) + f), ZSTR_VAL(repl_str), ZSTR_LEN(repl_str));
+ memcpy((ZSTR_VAL(result) + f + ZSTR_LEN(repl_str)), ZSTR_VAL(orig_str) + f + l, ZSTR_LEN(orig_str) - f - l);
}
ZSTR_VAL(result)[ZSTR_LEN(result)] = '\0';
/* {{{ php_str_replace_in_subject
*/
-static zend_long php_str_replace_in_subject(zval *search, zval *replace, zval *subject, zval *result, int case_sensitivity)
+static zend_long php_str_replace_in_subject(zval *search, zval *replace, zend_string *subject_str, zval *result, int case_sensitivity)
{
zval *search_entry,
*replace_entry = NULL;
zend_string *tmp_result,
- *tmp_subject_str,
*tmp_replace_entry_str = NULL,
*replace_entry_str;
char *replace_value = NULL;
size_t replace_len = 0;
zend_long replace_count = 0;
- zend_string *subject_str;
zend_string *lc_subject_str = NULL;
uint32_t replace_idx;
- /* Make sure we're dealing with strings. */
- subject_str = zval_get_tmp_string(subject, &tmp_subject_str);
if (ZSTR_LEN(subject_str) == 0) {
- zend_tmp_string_release(tmp_subject_str);
ZVAL_EMPTY_STRING(result);
return 0;
}
if (lc_subject_str) {
zend_string_release_ex(lc_subject_str, 0);
}
- zend_tmp_string_release(tmp_subject_str);
return replace_count;
}
}
ZVAL_STR_COPY(result, subject_str);
}
}
- zend_tmp_string_release(tmp_subject_str);
return replace_count;
}
/* }}} */
*/
static void php_str_replace_common(INTERNAL_FUNCTION_PARAMETERS, int case_sensitivity)
{
- zval *subject, *search, *replace, *subject_entry, *zcount = NULL;
+ zend_string *subject_str;
+ HashTable *subject_ht;
+ zval *search, *replace, *subject_entry, *zcount = NULL;
zval result;
zend_string *string_key;
zend_ulong num_key;
ZEND_PARSE_PARAMETERS_START(3, 4)
Z_PARAM_ZVAL(search)
Z_PARAM_ZVAL(replace)
- Z_PARAM_ZVAL(subject)
+ Z_PARAM_STR_OR_ARRAY_HT(subject_str, subject_ht)
Z_PARAM_OPTIONAL
Z_PARAM_ZVAL(zcount)
ZEND_PARSE_PARAMETERS_END();
}
/* if subject is an array */
- if (Z_TYPE_P(subject) == IS_ARRAY) {
+ if (subject_ht) {
array_init(return_value);
/* For each subject entry, convert it to string, then perform replacement
and add the result to the return_value array. */
- ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(subject), num_key, string_key, subject_entry) {
+ ZEND_HASH_FOREACH_KEY_VAL(subject_ht, num_key, string_key, subject_entry) {
ZVAL_DEREF(subject_entry);
if (Z_TYPE_P(subject_entry) != IS_ARRAY && Z_TYPE_P(subject_entry) != IS_OBJECT) {
- count += php_str_replace_in_subject(search, replace, subject_entry, &result, case_sensitivity);
+ zend_string *tmp_subject_str;
+ subject_str = zval_get_tmp_string(subject_entry, &tmp_subject_str);
+ count += php_str_replace_in_subject(search, replace, subject_str, &result, case_sensitivity);
+ zend_tmp_string_release(tmp_subject_str);
} else {
ZVAL_COPY(&result, subject_entry);
}
}
} ZEND_HASH_FOREACH_END();
} else { /* if subject is not an array */
- count = php_str_replace_in_subject(search, replace, subject, return_value, case_sensitivity);
+ count = php_str_replace_in_subject(search, replace, subject_str, return_value, case_sensitivity);
}
if (argc > 3) {
ZEND_TRY_ASSIGN_REF_LONG(zcount, count);
+++ /dev/null
---TEST--
-Test str_replace() function
---INI--
-precision=14
---FILE--
-<?php
-/*
- Prototype: mixed str_replace(mixed $search, mixed $replace,
- mixed $subject [, int &$count]);
- Description: Replace all occurrences of the search string with
- the replacement string
-*/
-
-echo "\n*** Testing str_replace() on basic operations ***\n";
-
-var_dump( str_replace("", "", "") );
-
-var_dump( str_replace("e", "b", "test") );
-
-var_dump( str_replace("", "", "", $count) );
-var_dump( $count );
-
-var_dump( str_replace("q", "q", "q", $count) );
-var_dump( $count );
-
-var_dump( str_replace("long string here", "", "", $count) );
-var_dump( $count );
-
-$fp = fopen( __FILE__, "r" );
-$fp_copy = $fp;
-var_dump( str_replace($fp_copy, $fp_copy, $fp_copy, $fp_copy) );
-var_dump( $fp_copy );
-fclose($fp);
-
-echo "\n*** Testing str_replace() with various search values ***";
-$search_arr = array( TRUE, FALSE, 1, 0, -1, "1", "0", "-1", NULL,
- array(), "php", "");
-
-$i = 0;
-/* loop through to replace the matched elements in the array */
-foreach( $search_arr as $value ) {
- echo "\n-- Iteration $i --\n";
- /* replace the string in array */
- var_dump( str_replace($value, "FOUND", $search_arr, $count) );
- var_dump( $count );
- $i++;
-}
-
-echo "\n*** Testing str_replace() with various subjects ***";
-$subject = "Hello, world,0120333.3445-1.234567 NULL TRUE FALSE\000
- \x000\xABCD\0abcd \xXYZ\tabcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)";
-
-/* needles in an array to be compared in the string $string */
-$search_str = array (
- "Hello, World",
- 'Hello, World',
- '!!Hello, World',
- "??Hello, World",
- "$@#%^&*!~,.:;?",
- "123",
- 123,
- "-1.2345",
- -1.2344,
- "abcd",
- 'XYZ',
- NULL,
- "NULL",
- "0",
- 0,
- "",
- " ",
- "\0",
- "\x000",
- "\xABC",
- "\0000",
- ".3",
- TRUE,
- "TRUE",
- "1",
- 1,
- FALSE,
- "FALSE",
- " ",
- " ",
- 'b',
- '\t',
- "\t",
- chr(128).chr(234).chr(65).chr(255).chr(256),
- $subject
-);
-
-/* loop through to get the $string */
-for( $i = 0; $i < count($search_str); $i++ ) {
- echo "\n--- Iteration $i ---";
- echo "\n-- String after replacing the search value is => --\n";
- var_dump( str_replace($search_str[$i], "FOUND", $subject, $count) );
- echo "-- search string has found '$count' times\n";
-}
-
-
-echo "\n*** Testing Miscelleneous input data ***\n";
-/* If replace has fewer values than search, then an empty
- string is used for the rest of replacement values */
-var_dump( str_replace(array("a", "a", "b"),
- array("q", "q"),
- "aaabb", $count
- )
- );
-var_dump($count);
-var_dump( str_replace(array("a", "a", "b"),
- array("q", "q"),
- array("aaa", "bbb", "ccc"),
- $count
- )
- );
-var_dump($count);
-
-
-echo "\n-- Testing objects --\n";
-/* we get "Recoverable fatal error: saying Object of class could not be converted
- to string" by default, when an object is passed instead of string:
-The error can be avoided by choosing the __toString magix method as follows: */
-
-class subject
-{
- function __toString() {
- return "Hello, world";
- }
-}
-$obj_subject = new subject;
-
-class search
-{
- function __toString() {
- return "Hello, world";
- }
-}
-$obj_search = new search;
-
-class replace
-{
- function __toString() {
- return "Hello, world";
- }
-}
-$obj_replace = new replace;
-
-var_dump(str_replace("$obj_search", "$obj_replace", "$obj_subject", $count));
-var_dump($count);
-
-
-echo "\n-- Testing arrays --\n";
-var_dump(str_replace(array("a", "a", "b"), "multi", "aaa", $count));
-var_dump($count);
-
-var_dump(str_replace( array("a", "a", "b"),
- array("q", "q", "c"),
- "aaa", $count
- )
-);
-var_dump($count);
-
-var_dump(str_replace( array("a", "a", "b"),
- array("q", "q", "c"),
- array("aaa", "bbb"),
- $count
- )
-);
-var_dump($count);
-
-var_dump(str_replace("a", array("q", "q", "c"), array("aaa", "bbb"), $count));
-var_dump($count);
-
-var_dump(str_replace("a", 1, array("aaa", "bbb"), $count));
-var_dump($count);
-
-var_dump(str_replace(1, 3, array("aaa1", "2bbb"), $count));
-var_dump($count);
-
-
-echo "\n-- Testing Resources --\n";
-$resource1 = fopen( __FILE__, "r" );
-$resource2 = opendir( "." );
-var_dump(str_replace("stream", "FOUND", $resource1, $count));
-var_dump($count);
-var_dump(str_replace("stream", "FOUND", $resource2, $count));
-var_dump($count);
-
-
-echo "\n-- Testing a longer and heredoc string --\n";
-$string = <<<EOD
-abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
-abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
-abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
-abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
-abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
-abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
-abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
-@#$%^&**&^%$#@!~:())))((((&&&**%$###@@@!!!~~~~@###$%^&*
-abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
-EOD;
-
-var_dump( str_replace("abcdef", "FOUND", $string, $count) );
-var_dump( $count );
-
-echo "\n-- Testing a heredoc null string --\n";
-$str = <<<EOD
-EOD;
-var_dump( str_replace("", "FOUND", $str, $count) );
-var_dump( $count );
-
-
-echo "\n-- Testing simple and complex syntax strings --\n";
-$str = 'world';
-
-/* Simple syntax */
-var_dump( str_replace("world", "FOUND", "$str") );
-var_dump( str_replace("world'S", "FOUND", "$str'S") );
-var_dump( str_replace("worldS", "FOUND", "$strS") );
-
-/* String with curly braces, complex syntax */
-var_dump( str_replace("worldS", "FOUND", "${str}S") );
-var_dump( str_replace("worldS", "FOUND", "{$str}S") );
-
-fclose($resource1);
-closedir($resource2);
-echo "Done\n";
-
-?>
---EXPECTF--
-*** Testing str_replace() on basic operations ***
-string(0) ""
-string(4) "tbst"
-string(0) ""
-int(0)
-string(1) "q"
-int(1)
-string(0) ""
-int(0)
-string(%d) "Resource id #%d"
-int(1)
-
-*** Testing str_replace() with various search values ***
--- Iteration 0 --
-array(12) {
- [0]=>
- string(5) "FOUND"
- [1]=>
- string(0) ""
- [2]=>
- string(5) "FOUND"
- [3]=>
- string(1) "0"
- [4]=>
- string(6) "-FOUND"
- [5]=>
- string(5) "FOUND"
- [6]=>
- string(1) "0"
- [7]=>
- string(6) "-FOUND"
- [8]=>
- string(0) ""
- [9]=>
- array(0) {
- }
- [10]=>
- string(3) "php"
- [11]=>
- string(0) ""
-}
-int(5)
-
--- Iteration 1 --
-array(12) {
- [0]=>
- string(1) "1"
- [1]=>
- string(0) ""
- [2]=>
- string(1) "1"
- [3]=>
- string(1) "0"
- [4]=>
- string(2) "-1"
- [5]=>
- string(1) "1"
- [6]=>
- string(1) "0"
- [7]=>
- string(2) "-1"
- [8]=>
- string(0) ""
- [9]=>
- array(0) {
- }
- [10]=>
- string(3) "php"
- [11]=>
- string(0) ""
-}
-int(0)
-
--- Iteration 2 --
-array(12) {
- [0]=>
- string(5) "FOUND"
- [1]=>
- string(0) ""
- [2]=>
- string(5) "FOUND"
- [3]=>
- string(1) "0"
- [4]=>
- string(6) "-FOUND"
- [5]=>
- string(5) "FOUND"
- [6]=>
- string(1) "0"
- [7]=>
- string(6) "-FOUND"
- [8]=>
- string(0) ""
- [9]=>
- array(0) {
- }
- [10]=>
- string(3) "php"
- [11]=>
- string(0) ""
-}
-int(5)
-
--- Iteration 3 --
-array(12) {
- [0]=>
- string(1) "1"
- [1]=>
- string(0) ""
- [2]=>
- string(1) "1"
- [3]=>
- string(5) "FOUND"
- [4]=>
- string(2) "-1"
- [5]=>
- string(1) "1"
- [6]=>
- string(5) "FOUND"
- [7]=>
- string(2) "-1"
- [8]=>
- string(0) ""
- [9]=>
- array(0) {
- }
- [10]=>
- string(3) "php"
- [11]=>
- string(0) ""
-}
-int(2)
-
--- Iteration 4 --
-array(12) {
- [0]=>
- string(1) "1"
- [1]=>
- string(0) ""
- [2]=>
- string(1) "1"
- [3]=>
- string(1) "0"
- [4]=>
- string(5) "FOUND"
- [5]=>
- string(1) "1"
- [6]=>
- string(1) "0"
- [7]=>
- string(5) "FOUND"
- [8]=>
- string(0) ""
- [9]=>
- array(0) {
- }
- [10]=>
- string(3) "php"
- [11]=>
- string(0) ""
-}
-int(2)
-
--- Iteration 5 --
-array(12) {
- [0]=>
- string(5) "FOUND"
- [1]=>
- string(0) ""
- [2]=>
- string(5) "FOUND"
- [3]=>
- string(1) "0"
- [4]=>
- string(6) "-FOUND"
- [5]=>
- string(5) "FOUND"
- [6]=>
- string(1) "0"
- [7]=>
- string(6) "-FOUND"
- [8]=>
- string(0) ""
- [9]=>
- array(0) {
- }
- [10]=>
- string(3) "php"
- [11]=>
- string(0) ""
-}
-int(5)
-
--- Iteration 6 --
-array(12) {
- [0]=>
- string(1) "1"
- [1]=>
- string(0) ""
- [2]=>
- string(1) "1"
- [3]=>
- string(5) "FOUND"
- [4]=>
- string(2) "-1"
- [5]=>
- string(1) "1"
- [6]=>
- string(5) "FOUND"
- [7]=>
- string(2) "-1"
- [8]=>
- string(0) ""
- [9]=>
- array(0) {
- }
- [10]=>
- string(3) "php"
- [11]=>
- string(0) ""
-}
-int(2)
-
--- Iteration 7 --
-array(12) {
- [0]=>
- string(1) "1"
- [1]=>
- string(0) ""
- [2]=>
- string(1) "1"
- [3]=>
- string(1) "0"
- [4]=>
- string(5) "FOUND"
- [5]=>
- string(1) "1"
- [6]=>
- string(1) "0"
- [7]=>
- string(5) "FOUND"
- [8]=>
- string(0) ""
- [9]=>
- array(0) {
- }
- [10]=>
- string(3) "php"
- [11]=>
- string(0) ""
-}
-int(2)
-
--- Iteration 8 --
-array(12) {
- [0]=>
- string(1) "1"
- [1]=>
- string(0) ""
- [2]=>
- string(1) "1"
- [3]=>
- string(1) "0"
- [4]=>
- string(2) "-1"
- [5]=>
- string(1) "1"
- [6]=>
- string(1) "0"
- [7]=>
- string(2) "-1"
- [8]=>
- string(0) ""
- [9]=>
- array(0) {
- }
- [10]=>
- string(3) "php"
- [11]=>
- string(0) ""
-}
-int(0)
-
--- Iteration 9 --
-array(12) {
- [0]=>
- string(1) "1"
- [1]=>
- string(0) ""
- [2]=>
- string(1) "1"
- [3]=>
- string(1) "0"
- [4]=>
- string(2) "-1"
- [5]=>
- string(1) "1"
- [6]=>
- string(1) "0"
- [7]=>
- string(2) "-1"
- [8]=>
- string(0) ""
- [9]=>
- array(0) {
- }
- [10]=>
- string(3) "php"
- [11]=>
- string(0) ""
-}
-int(0)
-
--- Iteration 10 --
-array(12) {
- [0]=>
- string(1) "1"
- [1]=>
- string(0) ""
- [2]=>
- string(1) "1"
- [3]=>
- string(1) "0"
- [4]=>
- string(2) "-1"
- [5]=>
- string(1) "1"
- [6]=>
- string(1) "0"
- [7]=>
- string(2) "-1"
- [8]=>
- string(0) ""
- [9]=>
- array(0) {
- }
- [10]=>
- string(5) "FOUND"
- [11]=>
- string(0) ""
-}
-int(1)
-
--- Iteration 11 --
-array(12) {
- [0]=>
- string(1) "1"
- [1]=>
- string(0) ""
- [2]=>
- string(1) "1"
- [3]=>
- string(1) "0"
- [4]=>
- string(2) "-1"
- [5]=>
- string(1) "1"
- [6]=>
- string(1) "0"
- [7]=>
- string(2) "-1"
- [8]=>
- string(0) ""
- [9]=>
- array(0) {
- }
- [10]=>
- string(3) "php"
- [11]=>
- string(0) ""
-}
-int(0)
-
-*** Testing str_replace() with various subjects ***
---- Iteration 0 ---
--- String after replacing the search value is => --
-string(177) "Hello, world,0120333.3445-1.234567 NULL TRUE FALSE\0
- \00«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!FOUND
- ?FOUND chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '2' times
-
---- Iteration 1 ---
--- String after replacing the search value is => --
-string(177) "Hello, world,0120333.3445-1.234567 NULL TRUE FALSE\0
- \00«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!FOUND
- ?FOUND chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '2' times
-
---- Iteration 2 ---
--- String after replacing the search value is => --
-string(182) "Hello, world,0120333.3445-1.234567 NULL TRUE FALSE\0
- \00«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: FOUND
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '1' times
-
---- Iteration 3 ---
--- String after replacing the search value is => --
-string(191) "Hello, world,0120333.3445-1.234567 NULL TRUE FALSE\0
- \00«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '0' times
-
---- Iteration 4 ---
--- String after replacing the search value is => --
-string(182) "Hello, world,0120333.3445-1.234567 NULL TRUE FALSE\0
- \00«CD\0abcd \xXYZ abcd $FOUND: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '1' times
-
---- Iteration 5 ---
--- String after replacing the search value is => --
-string(191) "Hello, world,0120333.3445-1.234567 NULL TRUE FALSE\0
- \00«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '0' times
-
---- Iteration 6 ---
--- String after replacing the search value is => --
-string(191) "Hello, world,0120333.3445-1.234567 NULL TRUE FALSE\0
- \00«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '0' times
-
---- Iteration 7 ---
--- String after replacing the search value is => --
-string(189) "Hello, world,0120333.3445FOUND67 NULL TRUE FALSE\0
- \00«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '1' times
-
---- Iteration 8 ---
--- String after replacing the search value is => --
-string(191) "Hello, world,0120333.3445-1.234567 NULL TRUE FALSE\0
- \00«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '0' times
-
---- Iteration 9 ---
--- String after replacing the search value is => --
-string(193) "Hello, world,0120333.3445-1.234567 NULL TRUE FALSE\0
- \00«CD\0FOUND \xXYZ FOUND $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '2' times
-
---- Iteration 10 ---
--- String after replacing the search value is => --
-string(193) "Hello, world,0120333.3445-1.234567 NULL TRUE FALSE\0
- \00«CD\0abcd \xFOUND abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '1' times
-
---- Iteration 11 ---
--- String after replacing the search value is => --
-string(191) "Hello, world,0120333.3445-1.234567 NULL TRUE FALSE\0
- \00«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '0' times
-
---- Iteration 12 ---
--- String after replacing the search value is => --
-string(192) "Hello, world,0120333.3445-1.234567 FOUND TRUE FALSE\0
- \00«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '1' times
-
---- Iteration 13 ---
--- String after replacing the search value is => --
-string(207) "Hello, world,FOUND12FOUND333.3445-1.234567 NULL TRUE FALSE\0
- \0FOUND«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(FOUND).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '4' times
-
---- Iteration 14 ---
--- String after replacing the search value is => --
-string(207) "Hello, world,FOUND12FOUND333.3445-1.234567 NULL TRUE FALSE\0
- \0FOUND«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(FOUND).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '4' times
-
---- Iteration 15 ---
--- String after replacing the search value is => --
-string(191) "Hello, world,0120333.3445-1.234567 NULL TRUE FALSE\0
- \00«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '0' times
-
---- Iteration 16 ---
--- String after replacing the search value is => --
-string(307) "Hello,FOUNDworld,0120333.3445-1.234567FOUNDFOUNDFOUNDFOUNDFOUNDFOUNDFOUNDFOUNDFOUNDFOUNDNULLFOUNDTRUEFOUNDFALSE\0
-FOUND FOUNDFOUNDFOUNDFOUND\00«CD\0abcdFOUND\xXYZ abcdFOUND$$@#%^&*!~,.:;?:FOUND!!Hello,FOUNDWorldFOUND
- FOUNDFOUNDFOUNDFOUND?Hello,FOUNDWorldFOUNDchr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '29' times
-
---- Iteration 17 ---
--- String after replacing the search value is => --
-string(203) "Hello, world,0120333.3445-1.234567 NULL TRUE FALSEFOUND
- FOUND0«CDFOUNDabcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '3' times
-
---- Iteration 18 ---
--- String after replacing the search value is => --
-string(194) "Hello, world,0120333.3445-1.234567 NULL TRUE FALSE\0
- FOUND«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '1' times
-
---- Iteration 19 ---
--- String after replacing the search value is => --
-string(194) "Hello, world,0120333.3445-1.234567 NULL TRUE FALSE\0
- \00FOUNDD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '1' times
-
---- Iteration 20 ---
--- String after replacing the search value is => --
-string(194) "Hello, world,0120333.3445-1.234567 NULL TRUE FALSE\0
- FOUND«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '1' times
-
---- Iteration 21 ---
--- String after replacing the search value is => --
-string(194) "Hello, world,0120333FOUND445-1.234567 NULL TRUE FALSE\0
- \00«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '1' times
-
---- Iteration 22 ---
--- String after replacing the search value is => --
-string(203) "Hello, world,0FOUND20333.3445-FOUND.234567 NULL TRUE FALSE\0
- \00«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(FOUND28).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '3' times
-
---- Iteration 23 ---
--- String after replacing the search value is => --
-string(192) "Hello, world,0120333.3445-1.234567 NULL FOUND FALSE\0
- \00«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '1' times
-
---- Iteration 24 ---
--- String after replacing the search value is => --
-string(203) "Hello, world,0FOUND20333.3445-FOUND.234567 NULL TRUE FALSE\0
- \00«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(FOUND28).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '3' times
-
---- Iteration 25 ---
--- String after replacing the search value is => --
-string(203) "Hello, world,0FOUND20333.3445-FOUND.234567 NULL TRUE FALSE\0
- \00«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(FOUND28).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '3' times
-
---- Iteration 26 ---
--- String after replacing the search value is => --
-string(191) "Hello, world,0120333.3445-1.234567 NULL TRUE FALSE\0
- \00«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '0' times
-
---- Iteration 27 ---
--- String after replacing the search value is => --
-string(191) "Hello, world,0120333.3445-1.234567 NULL TRUE FOUND\0
- \00«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '1' times
-
---- Iteration 28 ---
--- String after replacing the search value is => --
-string(307) "Hello,FOUNDworld,0120333.3445-1.234567FOUNDFOUNDFOUNDFOUNDFOUNDFOUNDFOUNDFOUNDFOUNDFOUNDNULLFOUNDTRUEFOUNDFALSE\0
-FOUND FOUNDFOUNDFOUNDFOUND\00«CD\0abcdFOUND\xXYZ abcdFOUND$$@#%^&*!~,.:;?:FOUND!!Hello,FOUNDWorldFOUND
- FOUNDFOUNDFOUNDFOUND?Hello,FOUNDWorldFOUNDchr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '29' times
-
---- Iteration 29 ---
--- String after replacing the search value is => --
-string(186) "Hello, world,0120333.3445-1.234567FOUNDNULL TRUE FALSE\0
- \00«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '1' times
-
---- Iteration 30 ---
--- String after replacing the search value is => --
-string(199) "Hello, world,0120333.3445-1.234567 NULL TRUE FALSE\0
- \00«CD\0aFOUNDcd \xXYZ aFOUNDcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '2' times
-
---- Iteration 31 ---
--- String after replacing the search value is => --
-string(191) "Hello, world,0120333.3445-1.234567 NULL TRUE FALSE\0
- \00«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '0' times
-
---- Iteration 32 ---
--- String after replacing the search value is => --
-string(203) "Hello, world,0120333.3445-1.234567 NULL TRUE FALSE\0
- FOUND \00«CD\0abcd \xXYZFOUNDabcd $$@#%^&*!~,.:;?: !!Hello, World
-FOUND ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '3' times
-
---- Iteration 33 ---
--- String after replacing the search value is => --
-string(191) "Hello, world,0120333.3445-1.234567 NULL TRUE FALSE\0
- \00«CD\0abcd \xXYZ abcd $$@#%^&*!~,.:;?: !!Hello, World
- ?Hello, World chr(0).chr(128).chr(234).chr(65).chr(255).chr(256)"
--- search string has found '0' times
-
---- Iteration 34 ---
--- String after replacing the search value is => --
-string(5) "FOUND"
--- search string has found '1' times
-
-*** Testing Miscelleneous input data ***
-string(3) "qqq"
-int(5)
-array(3) {
- [0]=>
- string(3) "qqq"
- [1]=>
- string(0) ""
- [2]=>
- string(3) "ccc"
-}
-int(6)
-
--- Testing objects --
-string(12) "Hello, world"
-int(1)
-
--- Testing arrays --
-string(15) "multimultimulti"
-int(3)
-string(3) "qqq"
-int(3)
-array(2) {
- [0]=>
- string(3) "qqq"
- [1]=>
- string(3) "ccc"
-}
-int(6)
-
-Warning: Array to string conversion in %s on line %d
-array(2) {
- [0]=>
- string(15) "ArrayArrayArray"
- [1]=>
- string(3) "bbb"
-}
-int(3)
-array(2) {
- [0]=>
- string(3) "111"
- [1]=>
- string(3) "bbb"
-}
-int(3)
-array(2) {
- [0]=>
- string(4) "aaa3"
- [1]=>
- string(4) "2bbb"
-}
-int(1)
-
--- Testing Resources --
-string(%d) "Resource id #%d"
-int(0)
-string(%d) "Resource id #%d"
-int(0)
-
--- Testing a longer and heredoc string --
-string(623) "FOUNDghijklmnopqrstuvwxyz0123456789FOUNDghijklmnopqrstuvwxyz0123456789
-FOUNDghijklmnopqrstuvwxyz0123456789FOUNDghijklmnopqrstuvwxyz0123456789
-FOUNDghijklmnopqrstuvwxyz0123456789FOUNDghijklmnopqrstuvwxyz0123456789
-FOUNDghijklmnopqrstuvwxyz0123456789FOUNDghijklmnopqrstuvwxyz0123456789
-FOUNDghijklmnopqrstuvwxyz0123456789FOUNDghijklmnopqrstuvwxyz0123456789
-FOUNDghijklmnopqrstuvwxyz0123456789FOUNDghijklmnopqrstuvwxyz0123456789
-FOUNDghijklmnopqrstuvwxyz0123456789FOUNDghijklmnopqrstuvwxyz0123456789
-@#$%^&**&^%$#@!~:())))((((&&&**%$###@@@!!!~~~~@###$%^&*
-FOUNDghijklmnopqrstuvwxyz0123456789FOUNDghijklmnopqrstuvwxyz0123456789"
-int(16)
-
--- Testing a heredoc null string --
-string(0) ""
-int(0)
-
--- Testing simple and complex syntax strings --
-string(5) "FOUND"
-string(5) "FOUND"
-
-Warning: Undefined variable: strS in %s on line %d
-string(0) ""
-string(5) "FOUND"
-string(5) "FOUND"
-Done