void *buf;
int32_t buf_len, idx;
UChar ch;
+ int repl_len;
+
+ if (repl) {
+ repl_len = Z_UNILEN_PP(repl);
+ } else {
+ repl_len = 0;
+ }
if (Z_TYPE_PP(str) == IS_UNICODE) {
- buf = emalloc(UBYTES(Z_USTRLEN_PP(str) -l + Z_USTRLEN_PP(repl) + 1));
+ buf = emalloc(UBYTES(Z_USTRLEN_PP(str) -l + repl_len + 1));
/* buf_len is codept count here */
buf_len = 0; idx = 0;
buf_len += zend_codepoint_to_uchar(ch, (UChar *)buf + buf_len);
}
if (repl != NULL) {
- u_memcpy((UChar *)buf + buf_len, Z_USTRVAL_PP(repl), Z_USTRLEN_PP(repl));
- buf_len += Z_USTRLEN_PP(repl);
+ u_memcpy((UChar *)buf + buf_len, Z_USTRVAL_PP(repl), repl_len);
+ buf_len += repl_len;
}
U16_FWD_N(Z_USTRVAL_PP(str), idx, Z_USTRLEN_PP(str), l);
u_memcpy((UChar *)buf + buf_len, Z_USTRVAL_PP(str) + idx, Z_USTRLEN_PP(str) - idx);
buf = erealloc(buf, UBYTES(buf_len + 1));
} else {
/* buf_len is char count here */
- buf_len = Z_STRLEN_PP(str) - l + Z_STRLEN_PP(repl);
+ buf_len = Z_STRLEN_PP(str) - l + repl_len;
buf = emalloc(buf_len + 1);
memcpy(buf, Z_STRVAL_PP(str), f);
- if (repl != NULL ) {
- memcpy((char *)buf + f, Z_STRVAL_PP(repl), Z_STRLEN_PP(repl));
+ if (repl != NULL) {
+ memcpy((char *)buf + f, Z_STRVAL_PP(repl), repl_len);
}
- memcpy((char *)buf + f + Z_STRLEN_PP(repl), Z_STRVAL_PP(str) + f + l, Z_STRLEN_PP(str) - f - l);
+ memcpy((char *)buf + f + repl_len, Z_STRVAL_PP(str) + f + l, Z_STRLEN_PP(str) - f - l);
*((char *)buf + buf_len) = '\0';
}
}
} else {
if (Z_TYPE_PP(str) != IS_ARRAY) {
- if (Z_TYPE_PP(str) == IS_UNICODE) {
- l = Z_USTRLEN_PP(str);
- } else {
- l = Z_STRLEN_PP(str);
- }
+ l = Z_UNILEN_PP(str);
}
}
tmp_repl = repl;
}
- if (Z_TYPE_PP(str) != Z_TYPE_PP(tmp_repl))
+ if (tmp_repl && Z_TYPE_PP(str) != Z_TYPE_PP(tmp_repl))
php_unify_string_types(str, tmp_repl TSRMLS_CC);
php_adjust_limits(str, &f, &l);
result_len = php_do_substr_replace(&result, str, tmp_repl, f, l TSRMLS_CC);
l = Z_LVAL_PP(tmp_len);
zend_hash_move_forward_ex(Z_ARRVAL_PP(len), &pos_len);
} else {
- if (Z_TYPE_PP(tmp_str) == IS_UNICODE) {
- l = Z_USTRLEN_PP(tmp_str);
- } else {
- l = Z_STRLEN_PP(tmp_str);
- }
+ l = Z_UNILEN_PP(tmp_str);
}
} else if (argc > 3) {
/* 'l' parsed & set at top of funcn */
+ l = Z_LVAL_PP(len);
} else {
- if (Z_TYPE_PP(tmp_str) == IS_UNICODE) {
- l = Z_USTRLEN_PP(tmp_str);
- } else {
- l = Z_STRLEN_PP(tmp_str);
- }
+ l = Z_UNILEN_PP(tmp_str);
}
if (Z_TYPE_PP(repl) == IS_ARRAY) {
tmp_repl = repl;
}
- if (Z_TYPE_PP(tmp_str) != Z_TYPE_PP(tmp_repl))
+ if (tmp_repl && Z_TYPE_PP(tmp_str) != Z_TYPE_PP(tmp_repl))
php_unify_string_types(tmp_str, tmp_repl TSRMLS_CC);
php_adjust_limits(tmp_str, &f, &l);
result_len = php_do_substr_replace(&result, tmp_str, tmp_repl, f, l TSRMLS_CC);
[1]=>
string(10) "trbala his"
}
+--UEXPECT--
+substr_replace('try this', 'bala ', 2)
+unicode(7) "trbala "
+
+substr_replace('try this', 'bala ', 2, 3)
+unicode(10) "trbala his"
+
+substr_replace('try this', 'bala ', 2, 0)
+unicode(13) "trbala y this"
+
+substr_replace('try this', 'bala ', 2, -2)
+unicode(9) "trbala is"
+
+
+
+substr_replace('try this', array ( 0 => 'bala ',), 4
+unicode(9) "try bala "
+
+substr_replace('try this', array ( 0 => 'bala ',), 4
+unicode(10) "try bala s"
+
+
+
+
+substr_replace(array ( 0 => 'ala portokala',), array ( 0 => 'bala ',), array ( 0 => 4,)
+array(1) {
+ [0]=>
+ unicode(9) "ala bala "
+}
+
+substr_replace(array ( 0 => 'ala portokala',), array ( 0 => 'bala ',), array ( 0 => 4,), array ( 0 => 3,))
+array(1) {
+ [0]=>
+ unicode(15) "ala bala tokala"
+}
+
+substr_replace(array ( 0 => 'ala portokala',), array ( 0 => 'bala ',), array ( 0 => 4,), array ( 0 => 0,))
+array(1) {
+ [0]=>
+ unicode(18) "ala bala portokala"
+}
+
+substr_replace(array ( 0 => 'ala portokala',), array ( 0 => 'bala ',), array ( 0 => 4,), array ( 0 => -2,))
+array(1) {
+ [0]=>
+ unicode(11) "ala bala la"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala',), 'bala ',4)
+array(1) {
+ [0]=>
+ unicode(9) "ala bala "
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),4, 3)
+array(2) {
+ [0]=>
+ unicode(15) "ala bala tokala"
+ [1]=>
+ unicode(5) "try s"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',4, 3)
+array(2) {
+ [0]=>
+ unicode(15) "ala bala tokala"
+ [1]=>
+ unicode(10) "try bala s"
+}
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),4, 0)
+array(2) {
+ [0]=>
+ unicode(18) "ala bala portokala"
+ [1]=>
+ unicode(8) "try this"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',4, 0)
+array(2) {
+ [0]=>
+ unicode(18) "ala bala portokala"
+ [1]=>
+ unicode(13) "try bala this"
+}
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),4, -2)
+array(2) {
+ [0]=>
+ unicode(11) "ala bala la"
+ [1]=>
+ unicode(6) "try is"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',4, -2)
+array(2) {
+ [0]=>
+ unicode(11) "ala bala la"
+ [1]=>
+ unicode(11) "try bala is"
+}
+
+
+
+
+
+
+substr_replace(array ( 0 => 'ala portokala',), 'bala ',array ( 0 => 4,))
+array(1) {
+ [0]=>
+ unicode(9) "ala bala "
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4,), 3)
+array(2) {
+ [0]=>
+ unicode(15) "ala bala tokala"
+ [1]=>
+ unicode(5) " this"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4,), 3)
+array(2) {
+ [0]=>
+ unicode(15) "ala bala tokala"
+ [1]=>
+ unicode(10) "bala this"
+}
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4,), 0)
+array(2) {
+ [0]=>
+ unicode(18) "ala bala portokala"
+ [1]=>
+ unicode(8) "try this"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4,), 0)
+array(2) {
+ [0]=>
+ unicode(18) "ala bala portokala"
+ [1]=>
+ unicode(13) "bala try this"
+}
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4,), -2)
+array(2) {
+ [0]=>
+ unicode(11) "ala bala la"
+ [1]=>
+ unicode(2) "is"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4,), -2)
+array(2) {
+ [0]=>
+ unicode(11) "ala bala la"
+ [1]=>
+ unicode(7) "bala is"
+}
+
+
+
+
+
+
+
+substr_replace(array ( 0 => 'ala portokala',), 'bala ',array ( 0 => 4, 1 => 2,))
+array(1) {
+ [0]=>
+ unicode(9) "ala bala "
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), 3)
+array(2) {
+ [0]=>
+ unicode(15) "ala bala tokala"
+ [1]=>
+ unicode(5) "trhis"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), 3)
+array(2) {
+ [0]=>
+ unicode(15) "ala bala tokala"
+ [1]=>
+ unicode(10) "trbala his"
+}
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), 0)
+array(2) {
+ [0]=>
+ unicode(18) "ala bala portokala"
+ [1]=>
+ unicode(8) "try this"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), 0)
+array(2) {
+ [0]=>
+ unicode(18) "ala bala portokala"
+ [1]=>
+ unicode(13) "trbala y this"
+}
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), -2)
+array(2) {
+ [0]=>
+ unicode(11) "ala bala la"
+ [1]=>
+ unicode(4) "tris"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), -2)
+array(2) {
+ [0]=>
+ unicode(11) "ala bala la"
+ [1]=>
+ unicode(9) "trbala is"
+}
+
+
+
+
+
+
+
+substr_replace(array ( 0 => 'ala portokala',), 'bala ',array ( 0 => 4, 1 => 2,))
+array(1) {
+ [0]=>
+ unicode(9) "ala bala "
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), array ( 0 => 3,))
+array(2) {
+ [0]=>
+ unicode(15) "ala bala tokala"
+ [1]=>
+ unicode(2) "tr"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), array ( 0 => 3,))
+array(2) {
+ [0]=>
+ unicode(15) "ala bala tokala"
+ [1]=>
+ unicode(7) "trbala "
+}
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), array ( 0 => 0,))
+array(2) {
+ [0]=>
+ unicode(18) "ala bala portokala"
+ [1]=>
+ unicode(2) "tr"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), array ( 0 => 0,))
+array(2) {
+ [0]=>
+ unicode(18) "ala bala portokala"
+ [1]=>
+ unicode(7) "trbala "
+}
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), array ( 0 => -2,))
+array(2) {
+ [0]=>
+ unicode(11) "ala bala la"
+ [1]=>
+ unicode(2) "tr"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), array ( 0 => -2,))
+array(2) {
+ [0]=>
+ unicode(11) "ala bala la"
+ [1]=>
+ unicode(7) "trbala "
+}
+
+
+
+
+
+
+
+substr_replace(array ( 0 => 'ala portokala',), 'bala ',array ( 0 => 4, 1 => 2,))
+array(1) {
+ [0]=>
+ unicode(9) "ala bala "
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), array ( 0 => 3, 1 => 2,))
+array(2) {
+ [0]=>
+ unicode(15) "ala bala tokala"
+ [1]=>
+ unicode(6) "trthis"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), array ( 0 => 3, 1 => 2,))
+array(2) {
+ [0]=>
+ unicode(15) "ala bala tokala"
+ [1]=>
+ unicode(11) "trbala this"
+}
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), array ( 0 => 0, 1 => 0,))
+array(2) {
+ [0]=>
+ unicode(18) "ala bala portokala"
+ [1]=>
+ unicode(8) "try this"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), array ( 0 => 0, 1 => 0,))
+array(2) {
+ [0]=>
+ unicode(18) "ala bala portokala"
+ [1]=>
+ unicode(13) "trbala y this"
+}
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), array ( 0 => -2, 1 => -3,))
+array(2) {
+ [0]=>
+ unicode(11) "ala bala la"
+ [1]=>
+ unicode(5) "trhis"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), array ( 0 => -2, 1 => -3,))
+array(2) {
+ [0]=>
+ unicode(11) "ala bala la"
+ [1]=>
+ unicode(10) "trbala his"
+}