PHP
downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

str_rot13> <str_repeat
Last updated: Fri, 02 Jan 2009

view this page in

str_replace

(PHP 4, PHP 5)

str_replace検索文字列に一致したすべての文字列を置換する

説明

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

この関数は、subject の中の search を全て replace に置換します。

(正規表現のような) 技巧的な置換ルールを必要としない場合、 ereg_replace() または preg_replace() の代わりにこの関数を常用するべきです。

パラメータ

searchreplace が配列の場合、str_replace() は各配列から値をひとつ取り出し、 subject 上で検索と置換を行うために使用します。 replace の値が search よりも少ない場合、 置換される値の残りの部分には空の文字列が使用されます。 search が配列で replace が文字列の場合、この置換文字列が search の各値について使用されます。しかし、 逆は意味がありません。

search あるいは replace が配列の場合は、配列の最初の要素から順に処理されます。

search

replace

subject

subject が配列の場合、 subject の各エントリについて検索と置換が行われ、 返り値は同様に配列となります。

count

注意: 指定した場合は、マッチして置換が行われた箇所の個数がここに格納されます。

返り値

この関数は、置換後の文字列あるいは配列を返します。

変更履歴

バージョン 説明
5.0.0 count パラメータが追加されました。
4.3.3 この関数の挙動がかわりました。以前のバージョンにはバグがあり、 searchreplace の両方に配列を指定した場合に、 空の search 添字をスキップしても replace 配列上の内部ポインタが進みませんでした。 このバグは PHP 4.3.3 で修正されたので、このバグを前提としたスクリプトは、 この関数をコールする前に空の検索値を削除しておく必要があります。
4.0.5 ほとんどのパラメータに配列を渡せるようになりました。

例1 str_replace() の例

<?php
// <body text='black'> となります
$bodytag str_replace("%body%""black""<body text='%body%'>");

// Hll Wrld f PHP となります
$vowels = array("a""e""i""o""u""A""E""I""O""U");
$onlyconsonants str_replace($vowels"""Hello World of PHP");

// You should eat pizza, beer, and ice cream every day となります
$phrase  "You should eat fruits, vegetables, and fiber every day.";
$healthy = array("fruits""vegetables""fiber");
$yummy   = array("pizza""beer""ice cream");

$newphrase str_replace($healthy$yummy$phrase);

// パラメータ count は PHP 5.0.0 で使用可能になりました
$str str_replace("ll""""good golly miss molly!"$count);
echo 
$count// 2

// 置換の順番を指定します
$str     "Line 1\nLine 2\rLine 3\r\nLine 4\n";
$order   = array("\r\n""\n""\r");
$replace '<br />';
// まず \r\n を最初に置換するので、二重に変換されることはありません
$newstr str_replace($order$replace$str);

// 出力は apearpearle pear となります
$letters = array('a''p');
$fruit   = array('apple''pear');
$text    'a p';
$output  str_replace($letters$fruit$text);
echo 
$output;
?>

注意

注意: この関数はバイナリデータに対応しています。

注意: この関数は大文字小文字を区別します。区別せずに置換するには str_ireplace() を使用します。



str_rot13> <str_repeat
Last updated: Fri, 02 Jan 2009
 
add a note add a note User Contributed Notes
str_replace
Daniel Vidal
07-Dec-2008 08:48
Substituindo caracteres acentuados em uma string (português)

If you need change portugues chars to ansi chars, try this

$com_acentos=array(
    "á","Á","ã","Ã",
    "â","Â","à","À",
    "é","É","ê","Ê",
    "í","Í","ó","Ó",
    "õ","Õ","ô","Ô",
    "ú","Ú","ü","Ü",
    "ç","Ç");
$sem_acentos=array(
    "a","A","a","A",
    "a","A","a","A",
    "e","E","e","E",
    "i","I","o","O",
    "o","O","o","O",
    "u","U","u","U",
    "c","C");

$input_string  = 'Ações em Alta. Série positiva:[áéíóúÁÉÍÓÚçÇ]';
$output_string = str_replace($com_acentos,$sem_acentos,$input_string);

echo 'input_string : ' . $input_string  . " <br />\n";
echo 'output_string: ' . $output_string . " <br />\n";

-------------------
Your will get:

input_string : Ações em Alta. Série positiva:[áéíóúÁÉÍÓÚçÇ]
output_string: Acoes em Alta. Serie positiva:[aeiouAEIOUcC]
gabriel dot totoliciu at ddnet dot ro
07-Dec-2008 11:30
As 'max at efoxdesigns dot com' said, when you try to replace a string that occurs in the $search array after the same character occurs in the $replace character, you don't usually get what you want.

examples:

<?php
$search
=array("beer", "graffiti", "programming");
$replace=array("graffiti", "motorcycles", "chips");
$string="I like beer, graffiti and programming.";

var_dump(str_replace($search, $replace, $string));
// you would expect to see:
// string(39) "I like graffiti, motorcycles and chips."

// well.. what you actually see is:
// string(42) "I like motorcycles, motorcycles and chips."

?>

I've made a function (stru_replace) that replaces everything correctly. It has some downsides, as it does not implement all the functionality of str_replace:

<?php
$search
=array("beer", "graffiti", "programming");
$replace=array("graffiti", "motorcycles", "chips");
$string="I like beer, graffiti and programming.";

var_dump(str_replace($search, $replace, $string));
//string(39) "I like graffiti, motorcycles and chips."
?>

I'm sure that the functions can be improved. Anyway, I guess they are a bit useful :D

<?php
//returns the key of the minimum value within the array
function minkey($array)
{
$first=true;
$mkey=false;
$mvalue=false;

foreach(
$array as $key=>$value)
    {
    if (
is_numeric($value))
        {
        if (
$mvalue>$value || $first)
            {
           
$mvalue=$value;
           
$mkey=$key;
            if (
$first) $first=false;
            }
        }
    }
   
return
$mkey;
}

//returns the key and the position of the first needle found withing the (string)haystack
function strposfirst($haystack, $needles, $currentpos=0)
{
$positions=array();
foreach(
$needles as $key=>$value)
   
$positions[$key]=strpos($haystack,$value,$currentpos);

$minkey=minkey($positions);
if (
$minkey===false) return array(false, false);
return array(
$minkey, $positions[$minkey]);
}

//third parameter must be a string
function stru_replace($search, $replace, $string)
{
$newString="";

// the function only implements functionality for the $search and $replace parameters
// as arrays that have the same ammount of elements
if (is_array($search) && is_array($replace))
    {
    if (
count($search)!=count($replace))
       
throw new ErrorException("The \$search and \$replace parameters must have the same number of elements");

   
$oCPos=0; // current position inside old string
   
$done=false; // determines when we searched all the string
   
   
while(!$done)
        {
       
//get the key and position of the first found element
       
list($key, $position)=strposfirst($string, $search, $oCPos);
       
       
//if there is a found element, get concatenate the string before it, and replace the string
       
if ($position!==false)
            {
           
// the string before the needle is concatenated in the new string
           
$newString.=substr($string, $oCPos, $position-$oCPos);
           
           
// the needle is replaced
           
$newString.=$replace[$key];
           
           
//add the with of the length of the string before the needle + the length of the new key
           
$oCPos+=$position-$oCPos+strlen($search[$key]);
            }
       
//set the done flag when nothing is found (position is false)
       
else $done=true;
        }
   
   
//concatenate the string after the last needle
   
$newString.=substr($string, $oCPos);
    return
$newString;
    }
else return
str_replace($search, $replace, $string);
}
?>

I hope this helps :)
If I'll change the functions, you'll find them here
http://pb.dev.ddnet.ro/phpLecture/issue1.php
nospam at nospam dot com
03-Dec-2008 06:55
Replacement for str_replace in which a multiarray of numerically keyed data can be properly evaluated with the given template without having a search for 11 be mistaken for two 1's next to each other

<?php

function data_template($input, $template) {
  if (
$template) { // template string
   
if ($split = str_split($template)) { // each char as array member
     
foreach ($split as $char) { // each character
       
if (is_numeric($char)) { // test for digit
         
if ($s != 1) { // new digit sequence
           
$i++;
           
$s = 1;
          }
         
$digits[$i] .= $char; // store digit
       
} else { // not a digit
         
if ($s != 2) { // new non-digit sequence
           
$i++;
           
$s = 2;
          }
         
$strings[$i] .= $char; // store string
       
}
      }
      if (
$i && $input && is_array($input)) { // input data
       
foreach ($input as $sub) { // each subarray
         
if (is_array($sub)) {
           
$out = ''; // reset output
           
for ($j = 0; $j <= $i; $j++) { // each number/string member
             
if ($number = $digits[$j]) { // number
               
$out .= $sub[$number]; // add value from subarray to output
             
} else { // string
               
$out .= $strings[$j]; // add to output
             
}
            }
           
$a[] = $out;
          }
        }
        return
$a;
      }
// input
   
} // split
 
} // template
}

$input = array(array(1=>'yellow', 2=>'banana', 11=>'fruit'), array(1=>'green', 2=>'spinach', 11=>'vegetable'), array(1=>'pink', 2=>'salmon', 11=>'fish'));

print_r (data_template($input, '2: a 1, healthy 11'));

/*
Array
(
    [0] => banana: a yellow, healthy fruit
    [1] => spinach: a green, healthy vegetable
    [2] => salmon: a pink, healthy fish
)
*/

// str_replace would have wanted to output 'banana: a yellow, healthy yellowyellow

?>

Not sure if this will help anyone but I wrote it for my application and thought I would share just in case
Konstantin
30-Oct-2008 07:01
Well, suffering without parameter replace ability like in plsql
sql = > "select * from x where id = %1";
execute sql, var1;
(sorry for pseudo)

here is a function just wrote for my self using str_replace, let me know if there is a better way for such generic function

<?php
function sql_prep()
{
       
$args = func_get_args();
       
$sql = array_shift($args);
       
$args_cnt = func_num_args();
       
$found=0;
        foreach(
$args as $key=>$value)
        {
               
$rep_str "\$sql = str_replace('%$key','$value',\$sql,\$count);";
                eval(
$rep_str);
                if(
$count)
                {
                       
$found++;
                }
        }
        if(
$found == $args_cnt-1)
        {
                return
$sql;
        }
        else
        {
                echo
"WARNING: number of subs=".($args_cnt-1)." does not match number of reps=$found";
                return
$sql;
        }
}
?>
tchapin at gmail dot com
16-Oct-2008 02:42
<?php

   
// Function used to "Genderize" a phrase, replacing "[he]" with "she", if gender is female,
    // and "[he]" with "he" if gender is male, and "[she]" with "he" if gender is male, etc...
   
function GenderizePhrase($Phrase='', $Gender="male"){
       
$SearchValues = array(
           
"[He]",
           
"[he]",
           
"[He's]",
           
"[he's]",
           
"[She]",
           
"[she]",
           
"[She's]",
           
"[she's]",
           
"[Him]",
           
"[him]",
           
"[Her]",
           
"[her]",
           
"[His]",
           
"[his]",
           
"[Hers]",
           
"[hers]",
           
"[Her's]",
           
"[her's]",
           
"[Himself]",
           
"[himself]",
           
"[Herself]",
           
"[Herself]"
       
);
        if(
$Gender=="Male" ||$Gender=="male" || $Gender == 1){
           
// Replace phrase pieces with male versions
           
$ReplacementValues = array(
               
"He",
               
"he",
               
"He's",
               
"he's",
               
"He",
               
"he",
               
"He's",
               
"he's",
               
"Him",
               
"him",
               
"His",
               
"his",
               
"His",
               
"his",
               
"His",
               
"his",
               
"His",
               
"his",
               
"Himself",
               
"himself",
               
"Himself",
               
"himself"
           
);
        }else{
           
// Replace phrase pieces with female versions
           
$ReplacementValues = array(
               
"She",
               
"she",
               
"She's",
               
"she's",
               
"She",
               
"she",
               
"She's",
               
"she's",
               
"Her",
               
"her",
               
"Her",
               
"her",
               
"Hers",
               
"hers",
               
"Hers",
               
"hers",
               
"Her's",
               
"her's",
               
"Herself",
               
"herself",
               
"Herself",
               
"Herself"
           
);
        }
        return
str_replace($SearchValues, $ReplacementValues, $Phrase);
    }

?>
lewdew at lycos dot co dot kr(LEE, EUN WOO)
16-Oct-2008 01:49
This function is made in order to slove the problem when using conventional str_replace built-in function when inserting tags in normal string.

<?php
$what
: string to be matched wholly
$where
: string to be searched in
$tag_open
: opening tag string such as <font color=#123456>
$tag_close : closing tag string such as </font>

function
str_html_addtag($what, $where, $tag_open, $tag_close)
{
   
$array_pos_begin = array();
   
$array_pos_end = array();
    for(
$cnt=0; $cnt<sizeof($what); $cnt++)
    {
       
$pos = 0;
       
$pos_start = $pos;
        while(
$pos = stripos($where, $what[$cnt], $pos))//stripos - case-insensitive search
      
{
           if(
is_false($pos)) break;
          
array_push($array_pos_begin, $pos);
          
array_push($array_pos_end, $pos+strlen($what[$cnt]));
           if(
sizeof($array_pos_begin)>10) break;
          
$pos++;
       }
    }
   
array_multisort($array_pos_begin, $array_pos_end);
    for(
$i=0; $i<sizeof($array_pos_begin)-1; $i++)
    {
        if(
$array_pos_end[$i]>=$array_pos_begin[$i+1])
        {
   
$array_pos_end[$i] = max($array_pos_end[$i], $array_pos_end[$i+1]);
   
array_splice($array_pos_begin, $i+1, -(sizeof($array_pos_begin)-($i+2)));
   
array_splice($array_pos_end, $i+1, -(sizeof($array_pos_end)-($i+2)));
   
$i--;
        }
    }
    for(
$i=sizeof($array_pos_begin)-1; $i>=0; $i--)
    {
       
$head = substr($where, 0, $array_pos_end[$i]);
       
$tail = substr($where, $array_pos_end[$i]);
       
$where = $head.$tag_close.$tail;

       
$head = substr($where, 0, $array_pos_begin[$i]);
       
$tail = substr($where, $array_pos_begin[$i]);
       
$where = $head.$tag_open.$tail;
    }
    return
$where;
}
?>
nick at NOSPAM dot pitchinteractive dot com
07-Oct-2008 07:12
I tried max at efoxdesigns dot com solution for str_replace_once but it didn't work quite right so I came up with this solution (all params must be strings):

<?php
function str_replace_once($search, $replace, $subject) {
   
$firstChar = strpos($subject, $search);
    if(
$firstChar !== false) {
       
$beforeStr = substr($subject,0,$firstChar);
       
$afterStr = substr($subject, $firstChar + strlen($search));
        return
$beforeStr.$replace.$afterStr;
    } else {
        return
$subject;
    }
}
?>
Mohammad Dayyan
25-Sep-2008 10:19
Changing English number with Persian number

<?php
function farsi_number($input)
{
 
$englishNumber=
       array(
"0","1","2","3","4","5","6","7","8","9");
 
$persianNumber=
       array(
"۰","۱","۲","۳","۴","۵","۶","۷","۸","۹");
  return
str_replace($englishNumber,
      
$persianNumber, $input);
}
?>
paolo A T doppioclick D O T com
05-Sep-2008 07:15
For PHP 4 < 4.4.5 and PHP 5 < 5.2.1 you may occur (like me) in this bug:

http://www.php-security.org/MOPB/MOPB-39-2007.html
marco dot carvalho at onda dot com dot br
30-Aug-2008 02:54
If you need to replace áóíóú and other special char, you need encondig type suport.

For this, just use htmlentities and some regular expressions

<?PHP

function RemoveAcentos($str, $enc = "UTF-8"){

$acentos = array(
   
'A' => '/&Agrave;|&Aacute;|&Acirc;|&Atilde;|&Auml;|&Aring;/',
   
'a' => '/&agrave;|&aacute;|&acirc;|&atilde;|&auml;|&aring;/',
   
'C' => '/&Ccedil;/',
   
'c' => '/&ccedil;/',
   
'E' => '/&Egrave;|&Eacute;|&Ecirc;|&Euml;/',
   
'e' => '/&egrave;|&eacute;|&ecirc;|&euml;/',
   
'I' => '/&Igrave;|&Iacute;|&Icirc;|&Iuml;/',
   
'i' => '/&igrave;|&iacute;|&icirc;|&iuml;/',
   
'N' => '/&Ntilde;/',
   
'n' => '/&ntilde;/',
   
'O' => '/&Ograve;|&Oacute;|&Ocirc;|&Otilde;|&Ouml;/',
   
'o' => '/&ograve;|&oacute;|&ocirc;|&otilde;|&ouml;/',
   
'U' => '/&Ugrave;|&Uacute;|&Ucirc;|&Uuml;/',
   
'u' => '/&ugrave;|&uacute;|&ucirc;|&uuml;/',
   
'Y' => '/&Yacute;/',
   
'y' => '/&yacute;|&yuml;/',
   
'a.' => '/&ordf;/',
   
'o.' => '/&ordm;/'
);

return
preg_replace($acentos, array_keys($acentos), htmlentities($str,ENT_NOQUOTES, $enc));

}
?>
max at efoxdesigns dot com
07-Aug-2008 04:13
I'm sorry.  I can't believe it: I messed up again.  Something that I forgot is that the php empty() function considers the number zero (0) as an empty value.  Therefore, we need to change our if statement to the following:
<?php
if ($i[0] !== null) $subject .= $replace[$i[0]];
?>
If we left it how it was, the replace ignores the first element of the arrays. ($array[0])

The reason that I used !empty() before, is that I wasn't sure what array_keys() returns if the element is not found (null? and empty string?), since both null and the empty string print out the same and I couldn't find what it returned in this case, in the manual.

The final, working function would look like:
<?php
function str_replace_once($search, $replace, $subject) {
   
$newArr = str_split($subject);
   
$subject = '';
    foreach (
$newArr as $nchar)
    {
       
$i = array_keys($search, $nchar);
        if (
$i[0] !== null) $subject .= $replace[$i[0]];
        else
$subject .= $nchar;
    }
    return
$subject;
}
?>
max at efoxdesigns dot com
07-Aug-2008 03:28
Sorry, folks. That last note I put up won't work quite correctly. Unlike str_replace(), that snippet I showed you will replace any characters that aren't in your $search array with an empty string.
To correct this behavior, add this check to the foreach loop:
<?php
   
//...
   
if (!empty($i[0])) $subject .= $replace[$i[0]];
    else
$subject .= $nchar; //now, if the search character isn't found (ie, we don't care about it), it will stay the same, instead of getting replaced by an empty string.
?>
The whole thing would look like the following, if you were to put it into a function:
<?php
function char_replace_once($search, $replace, $subject) {
   
$newArr = str_split($subject);
   
$subject = '';
    foreach (
$newArr as $nchar)
    {
       
$i = array_keys($search, $nchar);
        if (!empty(
$i[0])) $subject .= $replace[$i[0]];
        else
$subject .= $nchar;
    }
    return
$subject;
}
?>
I'm sure it may not be as efficient as str_replace(), but it successfully replaces characters, correctly.

ONE OTHER IMPORTANT THING TO NOTE: Unlike I said before, this will only work for character replacement - not string replacement. The reason, of course, is that the original string gets split into an array, who's members are only one character. Sorry about that.
That drawback aside, though, this is still a useful function for doing complete, accurate character replacement.
max at efoxdesigns dot com
07-Aug-2008 02:29
Note that the str_replace() function is recursive. This is not usually a problem, unless you are trying to do a replace in which a character or string occurs in the $search array, after the same character or string occurs in the $replace array. (For instance, imagine doing a global character replace.)
To demonstrate, take a look at the folowing:
<?php
$search
= array('q','w','e','r','t','y','u');
$replace = array('z','s','d','e','y','f','g');
$mystring = 'qwertyu';

//Outputs: zsdeffg
echo str_replace($search, $replace, $mystring);
?>
As you would expect, the q gets replaced by a z, the w by an s, and so on. Everything is correct, except that the t doesn't seem to have been replaced by a y. This is not entirely true, however. What happened is that it did, indeed get replaced by a y, but then on the next pass of the str_replace() function, str_replace() found a y and replaced it with an f.

To get this to work as we'd like (every letter in the $search array replaced by the cooresponding spot in the $replace array), we can do something like the following:
<?php
$search
= array('q','w','e','r','t','y','u');
$replace = array('z','s','d','e','y','f','g');
$mystring = 'qwertyu';

//Outputs: zsdeffg (Not what we wanted.)
echo str_replace($search, $replace, $mystring);

$newArr = str_split($mystring); //split $mystring into an array of characters. For php4, you'll have to create the str_split() function.
$newstring = '';
foreach (
$newArr as $nchar)
{
   
$i = array_keys($replace, $nchar); //get the key(s) in the $search array for the character we're replacing. (we assume it occurs only once.) Returns an array of length, 1.
   
$newstring .= $replace[$i[0]]; //find the character in the $replace array that matches the position of the one we're replacing, and add it to $newstring.
}

//Outputs: zsdeyfg
echo $newstring;
?>
This time, as you can see, there is a y in place of the t, which was what we wanted. :)
Hope that clears up any confusion for anyone wondering why their strings aren't getting replaced as they'd expect.
troy at troyonline dot com
23-Jun-2008 01:18
Yet another deep replace function:

<?php
   
function str_replace_deep( $search, $replace, $subject)
    {
       
$subject = str_replace( $search, $replace, $subject);

        foreach (
$subject as &$value)
           
is_array( $value) and $value =str_replace_deep( $search, $replace, $value);
           
        return
$subject;
    }
?>
jaimthorn at yahoo dot com
20-Jun-2008 07:52
On the 19th of June, 2008, max at bitsonnet dot com posted a function interpolate that used create_function. I'd never seen create_function before and I thought it was very educational.  Thanks, Maxim!

However, the interpolate function can be improved, speed-wise:

<?php

function interpolate2($template, $hash, $prefix = '#{', $postfix = '}')
{
   
$tmp = array();
    foreach(
$hash as $k => $v)
    {
       
$tmp[$prefix . $k . $postfix] = $v;
    }

    return
str_replace(array_keys($tmp), array_values($tmp), $template);
}

echo
interpolate2('Hello, #{username}. Welcome to #{site}.', array('username' => 'World', 'site' => 'php.net'));

?>

According to my own tests, this version is somewhere between 4 and 5 times faster.

Note, btw, that I used a very similar function on the sprintf page.
max at bitsonnet dot com
20-Jun-2008 05:00
I always miss interpolate functionality in PHP, so I wrote this little helper method. It allows you to specify your own markup using $prefix and $postfix.

<?php

#  Interpolate a string using hash.
#  by Maxim Chernyak ( http://mediumexposure.com )

function interpolate($template, $hash, $prefix = '#{', $postfix = '}' ) {
   
$tokenize = create_function('$token', 'return "'. $prefix .'".$token."'.$postfix.'";');
   
$keys = array_keys($hash);
   
$values = array_values($hash);
   
$keys = array_map($tokenize, $keys);
       
    return
str_replace($keys, $values, $template);
}

?>

For example:

<?php
    $result
= interpolate('Hello, #{username}. Welcome to #{site}.', array('username' => 'Hakunin', 'site' => 'php.net'));
?>
cclarkson at htcomp dot net
28-Apr-2008 06:32
The example presented by bladescope at googlemail dot com has a couple of syntax errors. This works:

<?php
    $template
= "The {color} {object} is in {location}";
   
$array = array(
       
'{object}'    => 'Ball',
       
'{color}'     => 'Red',
       
'{location}'  => 'The Playground',
    );
    foreach (
$array as $search => $replace) {
       
$template = str_replace($search, $replace, $template);
    }
    print
$template;
?>

I did not check it for speed or thoroughly test it, but this function seems to do the same thing more succinctly.

<?php
   
function template($array, $template) {
        return
str_replace(
           
array_keys($array),
           
array_values($array),
           
$template
       
);
    }

    echo
template(
         array(
           
'{color}'     => 'red',
           
'{object}'    => 'ball',
           
'{location}'  => 'the playground',
        ),
       
'The {color} {object} is in {location}.'
   
);
?>
David Gimeno i Ayuso (info at sima dot cat)
10-Aug-2007 03:50
This is the functions I wrote for the problem reported above, str_replace in multi-dimensional arrays. It can work with preg_replace as well.

<?php
function array_replace($SEARCH,$REPLACE,$INPUT) {
  if (
is_array($INPUT) and count($INPUT)<>count($INPUT,1)):
    foreach(
$INPUT as $FAN):
     
$OUTPUT[]=array_replace($SEARCH,$REPLACE,$FAN);
    endforeach;
  else:
   
$OUTPUT=str_replace($SEARCH,$REPLACE,$INPUT);
  endif;
  return
$OUTPUT;
}
?>
David Gimeno i Ayuso (info at sima dot cat)
10-Aug-2007 03:22
With PHP 4.3.1, at least, str_replace works fine when working with single arrays but mess it all with two or more dimension arrays.

<?php
$subject
= array("You should eat this","this","and this every day.");
$search  = "this";
$replace = "that";
$new     = str_replace($search, $replace, $subject);

print_r($new); // Array ( [0] => You should eat that [1] => that [2] => and that every day. )

echo "<hr />";

$subject = array(array("first", "You should eat this")
                ,array(
"second","this")
                ,array(
"third", "and this every day."));
$search  = "this";
$replace = "that";
$new     = str_replace($search, $replace, $subject);

print_r($new); // Array ( [0] => Array [1] => Array [2] => Array )

?>
mjaque at ilkebenson dot com
22-Jul-2007 04:28
In order to replace carriage return characters from form inputs, if everything else fails, you can try:

<?php
$new_text
= str_replace(chr(13).chr(10), '_', $original_text);
?>

And in order to show the line feeds in a javascript alert, you can do:

<?php
$new_text
= str_replace(chr(13).chr(10), '\n', $original_text);
?>
cm at k-a-p dot com
13-Jun-2007 09:47
Here is a version that allows for empty multidimensional arrays:

<?php
function str_replace_array ($search, $replace, $subject) {
    if (
is_array($subject)) {
        foreach (
$subject as $id=>$inner_subject) {
           
$subject[$id]=str_replace_array($search, $replace, $inner_subject);
        }
    } else {
       
$subject=str_replace($search, $replace, $subject);
    }
    return
$subject;
}
?>
tim at hysniu dot com
06-Jun-2007 02:27
I found that having UTF-8 strings in as argument didnt
work for me using heavyraptors function.
Adding UTF-8 as argument on htmlentities
fixed the problem.

cheers, tim at hysniu.com

<?php
function replace_accents($str) {
 
$str = htmlentities($str, ENT_COMPAT, "UTF-8");
 
$str = preg_replace(
'/&([a-zA-Z])(uml|acute|grave|circ|tilde);/',
'$1',$str);
  return
html_entity_decode($str);
}

?>
kole
26-Feb-2007 09:48
My input is MS Excel file but I want to save ‘,’,“,” as ',',",".

    $badchr        = array(
        "\xc2", // prefix 1
        "\x80", // prefix 2
        "\x98", // single quote opening
        "\x99", // single quote closing
        "\x8c", // double quote opening
        "\x9d"  // double quote closing
    );
       
    $goodchr    = array('', '', '\'', '\'', '"', '"');
       
    str_replace($badchr, $goodchr, $strFromExcelFile);

Works for me.
rlee0001 at sbcglobal dot net
17-Feb-2007 04:30
This is a more rigid alternative to spectrereturns at creaturestoke dot com's replace_different function:

<?php

       
function str_replace_many ($search, $replacements, $subject) {
           
$index = strlen($subject);
           
$replacements = array_reverse($replacements);

            if (
count($replacements) != substr_count($subject, $search)) {
                return
FALSE;
            }

            foreach (
$replacements as $replacement) {
               
$index = strrpos(substr($subject, 0, $index), $search);
               
$prefix = substr($subject, 0, $index);
&nb