value.
To replace text based on a pattern rather than a fixed
string, use
. If
, then an empty string is used for the rest of
replacement values. If
. The converse would
not make sense, though.
If
is an array, then the search and
replace is performed with every entry of
replaces left to right, it might
replace a previously inserted value when doing multiple replacements.
See also the examples in this document.
Note
:
This function is case-sensitive. Use
str_ireplace()
for case-insensitive replace.
str_ireplace()
- Case-insensitive version of str_replace
substr_replace()
- Replace text within a portion of a string
preg_replace()
- Perform a regular expression search and replace
strtr()
- Translate characters or replace substrings
nikolaz dot tang at hotmail dot com
¶
13 years ago
A faster way to replace the strings in multidimensional array is to json_encode() it, do the str_replace() and then json_decode() it, like this:
<?php
function
str_replace_json
(
$search
,
$replace
,
$subject
){
return
json_decode
(
str_replace
(
$search
,
$replace
,
json_encode
(
$subject
)));
}
?>
This method is almost 3x faster (in 10000 runs.) than using recursive calling and looping method, and 10x simpler in coding.
Compared to:
<?php
function
str_replace_deep
(
$search
,
$replace
,
$subject
)
{
if (
is_array
(
$subject
))
{
foreach(
$subject
as &
$oneSubject
)
$oneSubject
=
str_replace_deep
(
$search
,
$replace
,
$oneSubject
);
unset(
$oneSubject
);
return
$subject
;
} else {
return
str_replace
(
$search
,
$replace
,
$subject
);
}
}
?>
ressing1 at gmail dot com
¶
3 years ago
To remove all characters from string $b that exist in string $a:
$a="ABC";
$b="teAsBtC";
echo str_replace(str_split($a),'',$b);
Output: test
To remove all characters from string $b that don't exist in string $a:
$a="ABC";
$b="teAsBtC";
echo str_replace(str_split(str_replace(str_split($a),'',$b)),'',$b);
Output: ABC
moostende at gmail dot com
¶
12 years ago
Note that this does not replace strings that become part of replacement strings. This may be a problem when you want to remove multiple instances of the same repetative pattern, several times in a row.
If you want to remove all dashes but one from the string '-aaa----b-c-----d--e---f' resulting in '-aaa-b-c-d-e-f', you cannot use str_replace. Instead, use preg_replace:
<?php
$challenge
=
'-aaa----b-c-----d--e---f'
;
echo
str_replace
(
'--'
,
'-'
,
$challenge
).
'<br>'
;
echo
preg_replace
(
'/--+/'
,
'-'
,
$challenge
).
'<br>'
;
?>
This outputs the following:
-aaa--b-c---d-e--f
-aaa-b-c-d-e-f
Alberto Lepe
¶
15 years ago
Be careful when replacing characters (or repeated patterns in the FROM and TO arrays):
For example:
<?php
$arrFrom
= array(
"1"
,
"2"
,
"3"
,
"B"
);
$arrTo
= array(
"A"
,
"B"
,
"C"
,
"D"
);
$word
=
"ZBB2"
;
echo
str_replace
(
$arrFrom
,
$arrTo
,
$word
);
?>
I would expect as result: "ZDDB"
However, this return: "ZDDD"
(Because B = D according to our array)
To make this work, use "strtr" instead:
<?php
$arr
= array(
"1"
=>
"A"
,
"2"
=>
"B"
,
"3"
=>
"C"
,
"B"
=>
"D"
);
$word
=
"ZBB2"
;
echo
strtr
(
$word
,
$arr
);
?>
This returns: "ZDDB"
karst at onlinq dot nl
¶
9 years ago
"If search is an array and replace is a string, then this replacement string is used for every value of search. The converse would not make sense, though. "
I think one important (and not at all vaguely theoretical) use-case is completely ignored here. Take, for example, the way the PDO handles parameter replacement.
If we have the following query:
"SELECT * FROM my_table WHERE (id = ? AND my_column = ? AND other_column = ?);"
The "?"s should be replaced by each successive variable in a $parameters array. That is EXACTLY the use case for "search" being a value and "replace" being an array.
Considering that this is not only a real-world example but also part of a core PHP functionality I find it very strange that it's dismissed so easily here.
Wes Foster
¶
14 years ago
Feel free to optimize this using the while/for or anything else, but this is a bit of code that allows you to replace strings found in an associative array.
For example:
<?php
$replace
= array(
'dog'
=>
'cat'
,
'apple'
=>
'orange'
'chevy'
=>
'ford'
);
$string
=
'I like to eat an apple with my dog in my chevy'
;
echo
str_replace_assoc
(
$replace
,
$string
);
?>
Here is the function:
<?php
function
strReplaceAssoc
(array
$replace
,
$subject
) {
return
str_replace
(
array_keys
(
$replace
),
array_values
(
$replace
),
$subject
);
}
?>
[Jun 1st, 2010 - EDIT BY thiago AT php DOT net: Function has been replaced with an updated version sent by ljelinek AT gmail DOT com]
ravenswd at gmail dot com
¶
5 years ago
This is what happens when the search and replace arrays are different sizes:
<?php
$search
= array(
'a'
,
'b'
,
'c'
,
'd'
,
'e'
);
$replace
= array(
'A'
,
'B'
,
'C'
);
$subject
=
'abcdefg'
;
echo
str_replace
(
$search
,
$replace
,
$subject
);
$search
= array(
'a'
,
'b'
,
'c'
);
$replace
= array(
'A'
,
'B'
,
'C'
,
'D'
,
'E'
);
$subject
=
'abcdefg'
;
echo
str_replace
(
$search
,
$replace
,
$subject
);
?>
No warning or error is generated in either of these cases.
michael dot moussa at gmail dot com
¶
15 years ago
As previous commentators mentioned, when $search contains values that occur earlier in $replace, str_replace will factor those previous replacements into the process rather than operating solely on the original string. This may produce unexpected output.
Example:
<?php
$search
= array(
'A'
,
'B'
,
'C'
,
'D'
,
'E'
);
$replace
= array(
'B'
,
'C'
,
'D'
,
'E'
,
'F'
);
$subject
=
'ABCDE'
;
echo
str_replace
(
$search
,
$replace
,
$subject
);
?>
In the above code, the $search and $replace should replace each occurrence in the $subject with the next letter in the alphabet. The expected output for this sample is 'BCDEF'; however, the actual output is 'FFFFF'.
To more clearly illustrate this, consider the following example:
<?php
$search
= array(
'A'
,
'B'
,
'C'
,
'D'
,
'E'
);
$replace
= array(
'B'
,
'C'
,
'D'
,
'E'
,
'F'
);
$subject
=
'A'
;
echo
str_replace
(
$search
,
$replace
,
$subject
);
?>
Since 'A' is the only letter in the $search array that appears in $subject, one would expect the result to be 'B'; however, replacement number $n does *not* operate on $subject, it operates on $subject after the previous $n-1 replacements have been completed.
The following function utilizes array_combine and strtr to produce the expected output, and I believe it is the most efficient way to perform the desired string replacement without prior replacements affecting the final result.
<?php
function
stro_replace
(
$search
,
$replace
,
$subject
)
{
return
strtr
(
$subject
,
array_combine
(
$search
,
$replace
) );
}
$search
= array(
'A'
,
'B'
,
'C'
,
'D'
,
'E'
);
$replace
= array(
'B'
,
'C'
,
'D'
,
'E'
,
'F'
);
$subject
=
'ABCDE'
;
echo
stro_replace
(
$search
,
$replace
,
$subject
);
?>
Some other examples:
<?php
$search
= array(
' '
,
'&'
);
$replace
= array(
' '
,
'&'
);
$subject
=
'Hello & goodbye!'
;
echo
str_replace
(
$search
,
$replace
,
$subject
);
echo
stro_replace
(
$search
,
$replace
,
$subject
);
?>
<?php
$search
= array(
'ERICA'
,
'AMERICA'
);
$replace
= array(
'JON'
,
'PHP'
);
$subject
=
'MIKE AND ERICA LIKE AMERICA'
;
echo
str_replace
(
$search
,
$replace
,
$subject
);
echo
stro_replace
(
$search
,
$replace
,
$subject
);
?>
David Holt
¶
8 years ago
Be aware that if you use this for filtering & sanitizing some form of user input, or remove ALL instances of a string, there's another gotcha to watch out for:
// Remove all double characters
$string="1001011010";
$string=str_replace(array("11","00"),"",$string);
// Output: "110010"
$string="<ht<html>ml> Malicious code </<html>html> etc";
$string=str_replace(array("<html>","</html>"),"",$string);
// Output: "<html> Malicious code </html> etc"
mrrehbein at gmail dot com
¶
9 years ago
nikolaz dot tang at hotmail dot com's solution of using json_encode/decode is interesting, but a couple of issues to be aware of with it.
<?php
function
str_replace_json
(
$search
,
$replace
,
$subject
){
return
json_decode
(
str_replace
(
$search
,
$replace
,
json_encode
(
$subject
)));
}
?>
json_decode will return objects, where arrays are probably expected. This is easily remedied by adding 2nd parameter 'true' to json_decode.
$search and $replace could contain strings that match json encoding, which will either change the structure returned by this method, or break the json.
ie:
<?php
var_dump
(
str_replace_json
(
'":"'
,
'","'
, [
'this'
=>
'stuff'
]));
var_dump
(
str_replace_json
(
'this":"'
,
'this" : "thing", "with":"'
, [
'this'
=>
'stuff'
]));
?>
jay_knows_(all)uk at hotmail dot com
¶
13 years ago
This strips out horrible MS word characters.
Just keep fine tuning it until you get what you need, you'll see ive commented some out which caused problems for me.
There could be some that need adding in, but its a start to anyone who wishes to make their own custom function.
<?php
function
msword_conversion
(
$str
)
{
$str
=
str_replace
(
chr
(
130
),
','
,
$str
);
$str
=
str_replace
(
chr
(
131
),
'NLG'
,
$str
);
$str
=
str_replace
(
chr
(
132
),
'"'
,
$str
);
$str
=
str_replace
(
chr
(
133
),
'...'
,
$str
);
$str
=
str_replace
(
chr
(
134
),
'**'
,
$str
);
$str
=
str_replace
(
chr
(
135
),
'***'
,
$str
);
$str
=
str_replace
(
chr
(
136
),
'^'
,
$str
);
$str
=
str_replace
(
chr
(
137
),
'o/oo'
,
$str
);
$str
=
str_replace
(
chr
(
138
),
'Sh'
,
$str
);
$str
=
str_replace
(
chr
(
139
),
'<'
,
$str
);
$str
=
str_replace
(
chr
(
145
),
"'"
,
$str
);
$str
=
str_replace
(
chr
(
146
),
"'"
,
$str
);
$str
=
str_replace
(
chr
(
149
),
'-'
,
$str
);
$str
=
str_replace
(
chr
(
150
),
'-–'
,
$str
);
$str
=
str_replace
(
chr
(
151
),
'--'
,
$str
);
$str
=
str_replace
(
chr
(
154
),
'sh'
,
$str
);
$str
=
str_replace
(
chr
(
155
),
'>'
,
$str
);
$str
=
str_replace
(
chr
(
159
),
'Y'
,
$str
);
$str
=
str_replace
(
'°C'
,
'°C'
,
$str
);
$str
=
str_replace
(
'£'
,
'£'
,
$str
);
$str
=
str_replace
(
"'"
,
"'"
,
$str
);
$str
=
str_replace
(
'"'
,
'"'
,
$str
);
$str
=
str_replace
(
'–'
,
'–'
,
$str
);
return
$str
;
}
?>
jbarnett at jmbelite dot com
¶
14 years ago
Might be worth mentioning that a SIMPLE way to accomplish Example 2 (potential gotchas) is to simply start your "replacements" in reverse.
So instead of starting from "A" and ending with "E":
<?php
$search
= array(
'A'
,
'B'
,
'C'
,
'D'
,
'E'
);
$replace
= array(
'B'
,
'C'
,
'D'
,
'E'
,
'F'
);
$search
= array(
'E'
,
'D'
,
'C'
,
'B'
,
'A'
);
$replace
= array(
'F'
,
'E'
,
'D'
,
'C'
,
'B'
);
?>
So basically start from the "end" and put the replacements in an order where the "replaced value" won't equal a value that exists later in the "search array".
viundan at gmail dot com
¶
7 years ago
Decision to avoid problem "it might replace a previously inserted value when doing multiple replacements. See also the examples in this document."
$urls - array of urls i want to replace with tag <a> and urls could be similar
http://abc.com/parameter/
http://abc.com/
// at first sort by length to have longest firstly
usort($urls,'sortByLen');
$replaces=[];
// replace all urls with unique
foreach($urls as $url){
$replace = '__REPLACE' . uniqid() . '__';
$text = str_replace($url,$replace, $text);
$replaces[$replace] = '<a href="' . $url . '">' . $url . '</a>';
}
foreach($replaces as $key => $replace){
$text = str_replace($key,$replace, $text);
}
--------------
function sortByLen($a,$b){
return strlen($b)-strlen($a);
}
Hope it will help others like me
matt wheaton
¶
18 years ago
As an effort to remove those Word copy and paste smart quotes, I've found that this works with UTF8 encoded strings (where $text in the following example is UTF8). Also the elipsis and em and en dashes are replaced.
There is an "invisible" character after the †for the right side double smart quote that doesn't seem to display here. It is chr(157).
<?php
$find
[] =
'“'
;
$find
[] =
'â€'
;
$find
[] =
'‘'
;
$find
[] =
'’'
;
$find
[] =
'…'
;
$find
[] =
'—'
;
$find
[] =
'–'
;
$replace
[] =
'"'
;
$replace
[] =
'"'
;
$replace
[] =
"'"
;
$replace
[] =
"'"
;
$replace
[] =
"..."
;
$replace
[] =
"-"
;
$replace
[] =
"-"
;
$text
=
str_replace
(
$find
,
$replace
,
$text
);
?>
pjcdawkins at googlemail dot com
¶
14 years ago
Here's a deep replace function allowing multi-dimensional arrays in $search, $replace and $subject. The keys and other structure of $subject are preserved.
<?php
function
_replaceWithAnything
(
$search
,
$replace
,
$subject
){
if(!
is_array
(
$search
) || !
is_array
(
$replace
)){
$search
=array(
$search
);
$replace
=array(
$replace
);
}
$match
=
array_search
(
$subject
,
$search
,
true
);
if(
$match
!==
false
&&
array_key_exists
(
$match
,
$replace
))
$subject
=
$replace
[
$match
];
return
$subject
;
}
function
deepReplace
(
$search
,
$replace
,
$subject
){
if(!
is_array
(
$subject
))
return
_replaceWithAnything
(
$search
,
$replace
,
$subject
);
foreach(
$subject
as &
$val
){
if(
is_array
(
$val
)){
$val
=
deepReplace
(
$search
,
$replace
,
$val
);
continue;
}
$val
=
_replaceWithAnything
(
$search
,
$replace
,
$val
);
}
return
$subject
;
}
?>
apmuthu at usa dot net
¶
14 years ago
If we have a html template that contains placeholders in curly braces that need to be replaced in runtime, the following function will do it using str_replace:
<?php
function
parse_template
(
$filename
,
$data
) {
$q
=
file_get_contents
(
$filename
);
foreach (
$data
as
$key
=>
$value
) {
$q
=
str_replace
(
'{'
.
$key
.
'}'
,
$value
,
$q
);
}
return
$q
;
}
?>
kriscraig at php dot net
¶
11 years ago
<?php
public static function
convert_chars_to_entities
(
$str
)
{
$str
=
str_replace
(
'À'
,
'À'
,
$str
);
$str
=
str_replace
(
'Á'
,
'Á'
,
$str
);
$str
=
str_replace
(
'Â'
,
'Â'
,
$str
);
$str
=
str_replace
(
'Ã'
,
'Ã'
,
$str
);
$str
=
str_replace
(
'Ä'
,
'Ä'
,
$str
);
$str
=
str_replace
(
'Å'
,
'Å'
,
$str
);
$str
=
str_replace
(
'Æ'
,
'Æ'
,
$str
);
$str
=
str_replace
(
'Ç'
,
'Ç'
,
$str
);
$str
=
str_replace
(
'È'
,
'È'
,
$str
);
$str
=
str_replace
(
'É'
,
'É'
,
$str
);
$str
=
str_replace
(
'Ê'
,
'Ê'
,
$str
);
$str
=
str_replace
(
'Ë'
,
'Ë'
,
$str
);
$str
=
str_replace
(
'Ì'
,
'Ì'
,
$str
);
$str
=
str_replace
(
'Í'
,
'Í'
,
$str
);
$str
=
str_replace
(
'Î'
,
'Î'
,
$str
);
$str
=
str_replace
(
'Ï'
,
'Ï'
,
$str
);
$str
=
str_replace
(
'Ð'
,
'Ð'
,
$str
);
$str
=
str_replace
(
'Ñ'
,
'Ñ'
,
$str
);
$str
=
str_replace
(
'Ò'
,
'Ò'
,
$str
);
$str
=
str_replace
(
'Ó'
,
'Ó'
,
$str
);
$str
=
str_replace
(
'Ô'
,
'Ô'
,
$str
);
$str
=
str_replace
(
'Õ'
,
'Õ'
,
$str
);
$str
=
str_replace
(
'Ö'
,
'Ö'
,
$str
);
$str
=
str_replace
(
'×'
,
'×'
,
$str
);
$str
=
str_replace
(
'Ø'
,
'Ø'
,
$str
);
$str
=
str_replace
(
'Ù'
,
'Ù'
,
$str
);
$str
=
str_replace
(
'Ú'
,
'Ú'
,
$str
);
$str
=
str_replace
(
'Û'
,
'Û'
,
$str
);
$str
=
str_replace
(
'Ü'
,
'Ü'
,
$str
);
$str
=
str_replace
(
'Ý'
,
'Ý'
,
$str
);
$str
=
str_replace
(
'Þ'
,
'Þ'
,
$str
);
$str
=
str_replace
(
'ß'
,
'ß'
,
$str
);
$str
=
str_replace
(
'à'
,
'à'
,
$str
);
$str
=
str_replace
(
'á'
,
'á'
,
$str
);
$str
=
str_replace
(
'â'
,
'â'
,
$str
);
$str
=
str_replace
(
'ã'
,
'ã'
,
$str
);
$str
=
str_replace
(
'ä'
,
'ä'
,
$str
);
$str
=
str_replace
(
'å'
,
'å'
,
$str
);
$str
=
str_replace
(
'æ'
,
'æ'
,
$str
);
$str
=
str_replace
(
'ç'
,
'ç'
,
$str
);
$str
=
str_replace
(
'è'
,
'è'
,
$str
);
$str
=
str_replace
(
'é'
,
'é'
,
$str
);
$str
=
str_replace
(
'ê'
,
'ê'
,
$str
);
$str
=
str_replace
(
'ë'
,
'ë'
,
$str
);
$str
=
str_replace
(
'ì'
,
'ì'
,
$str
);
$str
=
str_replace
(
'í'
,
'í'
,
$str
);
$str
=
str_replace
(
'î'
,
'î'
,
$str
);
$str
=
str_replace
(
'ï'
,
'ï'
,
$str
);
$str
=
str_replace
(
'ð'
,
'ð'
,
$str
);
$str
=
str_replace
(
'ñ'
,
'ñ'
,
$str
);
$str
=
str_replace
(
'ò'
,
'ò'
,
$str
);
$str
=
str_replace
(
'ó'
,
'ó'
,
$str
);
$str
=
str_replace
(
'ô'
,
'ô'
,
$str
);
$str
=
str_replace
(
'õ'
,
'õ'
,
$str
);
$str
=
str_replace
(
'ö'
,
'ö'
,
$str
);
$str
=
str_replace
(
'÷'
,
'÷'
,
$str
);
$str
=
str_replace
(
'ø'
,
'ø'
,
$str
);
$str
=
str_replace
(
'ù'
,
'ù'
,
$str
);
$str
=
str_replace
(
'ú'
,
'ú'
,
$str
);
$str
=
str_replace
(
'û'
,
'û'
,
$str
);
$str
=
str_replace
(
'ü'
,
'ü'
,
$str
);
$str
=
str_replace
(
'ý'
,
'ý'
,
$str
);
$str
=
str_replace
(
'þ'
,
'þ'
,
$str
);
$str
=
str_replace
(
'ÿ'
,
'ÿ'
,
$str
);
return
$str
;
}
?>
Ing. Mirko Plazotta
¶
9 years ago
<?php
$replaceThis
= Array(
'old word'
=>
'new word'
,
'was'
=>
'it'
,
'past'
=>
'future'
,
);
$originalText
=
"every old word was a thing of the past..."
;
$replacedText
=
str_replace
(
array_keys
(
$replaceThis
),
$replaceThis
,
$originalText
);
echo
$replacedText
;
?>
Denzel Morris
¶
12 years ago
Maybe obvious to veteran PHP programmers but less so to novice PHP programmers is the fact that this is invalid:
<?php
str_replace
(
$search
,
$replace
,
$subject
,
1
);
?>
At a glance it appears to be a reasonable request, until you realize that the fourth parameter must be a variable in order to be passed as a reference. A replacement:
<?php
str_replace
(
$search
,
$replace
,
$subject
,
$temp
=
1
);
$temp
=
1
;
str_replace
(
$search
,
$replace
,
$subject
,
$temp
);
?>
mbullard at accuvista dot co dot uk
¶
12 years ago
Insert space after comma.
If you have a form that stores results in a database field as comma separated values, when you display this data you can use the following to insert a space after each comma:
<?php
$find
[] =
','
;
$replace
[] =
', '
;
$text
=
str_replace
(
$find
,
$replace
,
$row_rsRecordset
[
'Field'
]);
print_r
(
$text
);
?>
Notes:
1) To get round the Replacement Order Gotcha, the comma is also replaced with its code equivalent: ,
2) You can adapt the $replace section to suit your needs: swap out the code with <br/> or replace comma and space with · etc.
Oyedele Hammed Horlah - itz dot harmid at gmail dot com
¶
6 years ago
this is a simple function to replace all newlines to <br> tags.
\r\n - windows line break
\n - linux line break
\r - mac line break
<?php
function
nl_to_br
(
$str
) {
return
str_replace
(array(
"\r\n"
,
"\n"
,
"\r"
),
"<br/>"
,
$str
);
}
echo
nl_to_br
(
'Hello world\n I am Oyedele Hammed Horlah'
);
?>
Enjoy
Mohsin Ali (puregenius02 at gmail dot com)
¶
8 years ago
$myString = “It was the best of mine it was the worst of mine,”;
// Displays “It was the best of bananas, it was the worst of bananas,”
echo str_replace( “mine”, “bananas”, $myString );
If you want to know how many times the search string was replaced, pass in a variable as an optional
fourth argument. After the function runs, this variable holds the number of replacements:
$myString = “It was the best of mine, it was the worst of mine,”;
// Displays “It was the best of bananas, it was the worst of bananas,”
echo str_replace( “mine”, “bananas”, $myString, $num ) . “ < br/ > ”;
// Displays “The text was replaced 2 times.”
echo “The text was replaced $num times. < br/ > ”;
markem at sim1 dot us
¶
9 years ago
I was working with MySQL and displaying the title to things on the web page. I'd written a script to ensure single and double quotes were removed from the title. I used
$title = str_replace( "'", "", $title );
and
$title = str_replace( '"', "", $title );
But still the single and double quotes continued. So I wrote a bit of code to print out each character separated by a dash. Like so:
for( $i=0; $i<strlen($title); $i++ ){
echo "$i-";
}
echo "<br>\n";
This displayed:
m-y-c-o-m-p-a-n-y- b-b-&-#-3-9-;-s
Which made me go "Oh! I get it."
The MySQL function real_escape_string modifies the single quotes to be ' and double quotes as " These still show up as single and double quotes under HTML and most importantly -
JAVASCRIPT sees the " and ' as actual single or double
quotes. So if you are passing arguments to a function you have
to get rid of them or else you will get an error on trying to call
a given function. Example:
<a href="javascript:func1('mycompany bbs's")'">
becomes
<a href="javascript:func1('mycompany bbs's');">
Which then will give you an error because there is a single quote inside of the single quoted string. HOWEVER, the
$title = str_replace( "'", "", $title );
WILL NOT FIND a single quote. Instead, you have to do this:
$title = str_replace( "'", "'", $title );
and
$title = str_relace( """, '"', $title );
(Or you could just get rid of them.)
So remember! If you are trying to remove single and double quotes and are using MySQL and MySQL's real_escape_string() function that you might be having single and double quotes hanging around which are defined as ' and " but which show up as single and double quotes as well as causing problems in your Javascripts.
cc at cc dot com
¶
12 years ago
I found a pretty low tech solution to avoid the "gotcha" without worrying about the array order of how things are replaced. I could not "order" the replacement array easily because it was being read from a database table.
Anyway if you add an identifiable token to each replaced word, then just filter this out at the very end, no nested search terms are found. I just dynamically add the %% after the first char of each word before pumping it into the str_ireplace function.
$find = array("as1", "as2", "as3", "flex");
$replace = array("<a href = \"#as1\">A%%uto S%%entry R%%ev. A%%</a>", "<a href = \"#as2\">A%%uto S%%entry E%%xp</a>", "<a href = \"#as3\">A%%uto S%%entry f%%lex</a>", "<a style = \"color: red;\" href = \"#flex\">f%%lex</a>");
$text = str_ireplace($find, $replace, $text);
echo str_ireplace("%%", "", $text);
In this case I am using %% as my token as this is an unlikely char combo for me.
flame2000 at mail dot ru
¶
7 years ago
Replace chars in multi-byte string.
In example, replacing 'f'=>'b', 'o'=>'e', 't'=>'r' and etc.
<?php
function
mb_chars_replace
(
$from
,
$to
,
$subj
,
$delSymb
=
'_'
) {
$nsubj
=
''
;
preg_match_all
(
'/(.)/u'
,
$subj
,
$subj
);
$subj
=
$subj
[
1
];
if (!
is_array
(
$from
)) {
preg_match_all
(
'/(.)/u'
,
$from
,
$from
);
$from
=
$from
[
1
];}
if (!
is_array
(
$to
)) {
preg_match_all
(
'/(.)/u'
,
$to
,
$to
);
$to
=
$to
[
1
];}
if (
count
(
$from
)!==
count
(
$to
)) return
false
;
foreach(
$subj
as
$s
) {
foreach(
$from
as
$k
=>
$f
) {
if(
$s
===
$f
) {
$s
=
$to
[
$k
];
break;
}
}
if(
$s
!==
$delSymb
)
$nsubj
.=
$s
;
}
return
$nsubj
;
}
$from
=
"fotber, "
;
$to
=
"berfot+_"
;
$from
=array(
"f"
,
"o"
,
"t"
,
"b"
,
"e"
,
"r"
,
","
,
" "
);
$to
=array(
"b"
,
"e"
,
"r"
,
"f"
,
"o"
,
"t"
,
"+"
,
"_"
);
echo
mb_chars_replace
(
$from
,
$to
,
"foot, beer"
);
?>
jefrey at forteras dot tech
¶
6 years ago
NEVER USE this function to protect against SQL Injection.
It may sound ridiculous but I've seen a couple of developers doing so.
It's interesting that these developers use str_replace (let's ignore the fact that they don't even use the str_ireplace which is case-insensitive) to remove common SQL commands such as "SELECT" or "DROP" from user-entered inputs.
A funny thing to note is that:
<?php
$input
=
"SELSELECTECT"
;
echo
str_replace
(
"SELECT"
,
null
,
$input
);
?>
Yeah you could loop it, but str_replace was never meant to be used this way. There are proper ways to protect against SQL Injections, such as using prepared statements (placeholders).
christof dot rieger at r-tron dot de
¶
12 years ago
In many countries the numeric format is 1.000,33 in english it is 1,000.33
This function converts numeric arguments always into the PHP confirm numeric format. If only one seperator is into the numericstring so it is interpreted as the decimalpoint.
function dp($zahl)
{
if ((strpos($zahl,".") > "-1") | (strpos($zahl,",") > "-1")) {
if ((strpos($zahl,".") > "-1") & (strpos($zahl,",") > "-1")) {
if (strpos($zahl,".") > strpos($zahl,",")){
return str_replace(",","",$zahl);
} else {
return str_replace(",",".",str_replace(".","",$zahl));
}
} else {
if (strpos($zahl,".") > "-1") {
if (strpos($zahl,".") == strrpos($zahl,".")) {
return $zahl;
} else {
return str_replace(".","",$zahl);
}
} else {
if (strpos($zahl,",") == strrpos($zahl,",")) {
return str_replace(",",".",$zahl);
} else {
return str_replace(",","",$zahl);
}
} }
} else {
return $zahl;
} }
borasahin at gmail dot com
¶
9 years ago
jSON Turkish Characters Problem - (PHP < 5.4 for example)
<?php
function
json_decode_tr
(
$json
){
$json_char
= array(
"u00e7"
,
"u0131"
,
"u00fc"
,
"u011f"
,
"u00f6"
,
"u015f"
,
"u0130"
,
"u011e"
,
"u00dc"
,
"u00d6"
,
"u015e"
,
"u00c7"
);
$turkish
= array(
"ç"
,
"ı"
,
"ü"
,
"ğ"
,
"ö"
,
"ş"
,
"İ"
,
"Ğ"
,
"Ü"
,
"Ö"
,
"Ş"
,
"Ç"
);
$result
=
str_replace
(
$json_char
,
$turkish
,
$json
);
return
json_decode
(
$json
);
}
?>
Anonymous
¶
10 years ago
@moostende at gmail dot com
If you want to remove all dashes but one from the string '-aaa----b-c-----d--e---f' resulting in '-aaa-b-c-d-e-f', you CAN use str_replace !
<?php
function
foo
(
$str
)
{
do {
$str
=
str_replace
(
"--"
,
"-"
,
$str
,
$count
);
} while (
$count
>
0
);
return
$str
;
}
echo
foo
(
"-aaa----b-c-----d--e---f"
);
?>
This outputs the following:
-aaa-b-c-d-e-f
ASchmidt at Anamera dot net
¶
6 years ago
Escaping strings with control characters, quotes and backslashes for subsequent use in MySQL commands.
MySQL has documented a number of backslash escape sequences that need to be used to pass certain values in SQL commands:
https://dev.mysql.com/doc/refman/5.7/en/string-literals.html
It's crucial to escape existing backslashes first to prevent double-escaping, before escaping the various control sequences:
<?php
$result
=
str_replace
(
array(
'\\'
,
"\0"
,
"'"
,
"\x8"
,
"\n"
,
"\r"
,
"\t"
,
"\x1A"
),
array(
'\\\\'
,
'\\0'
,
'\\\''
,
'\\b'
,
'\\n'
,
'\\r'
,
'\\t'
,
'\\Z'
),
$value
);
?>
This code is NOT intended to protect against SQL insertions, it's intended to PRESERVE string content correctly, if it contains control characters.
christian dot reinecke at web dot de
¶
14 years ago
If you need to replace a string in another, but only once but still in all possible combinations (f.e. to replace "a" with "x" in "aba" to get array("xba", "abx")) you can use this function:
<?php
function
getSingleReplaceCombinations
(
$replace
,
$with
,
$inHaystack
)
{
$splits
=
explode
(
$replace
,
$inHaystack
);
$result
= array();
for (
$i
=
1
,
$ix
=
count
(
$splits
);
$i
<
$ix
; ++
$i
) {
$previous
=
array_slice
(
$splits
,
0
,
$i
);
$next
=
array_slice
(
$splits
,
$i
);
$combine
=
array_pop
(
$previous
) .
$with
.
array_shift
(
$next
);
$result
[] =
implode
(
$replace
,
array_merge
(
$previous
, array(
$combine
),
$next
));
}
return
$result
;
}
var_dump
(
getSingleReplaceCombinations
(
"a"
,
"x"
,
"aba"
));
?>
It may not be the best in performance, but it works.
vuabid at hotmail dot com
¶
6 years ago
Consider this while using str_replace function when $search and $replace are arrays.
$search = array( 'login_reactivate', 'login_reactivate_date' );
$replace = array( 'login reactivate status', 'login reactivate date' );
$subject = "fname, email, login_reactivate, login_reactivate_date";
$returnValue = str_replace( $search, $replace, $subject );
$returnValue will be:
fname, email, login reactivate status, login reactivate status_date
You can see we are expecting "login_reactivate_date" to be replaced with "login reactivate date" but it will replace to "login reactivate status_date"
iskus1981 at gmail dot com
¶
4 years ago
bracesChecker($str) {
while($str) {
$str = str_replace(['()','[]','{}'], '', $str, $count);
if (!$str) return true;
if (!$count && $str) return false;
}
}
$str = '[}]{(){][}()';
echo bracesChecker($str);
//false
$str = '([]{})[{}[]{[]}([{[]}])';
echo bracesChecker ($str);
//true