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: Tue, 30 Jun 2009

view this page in

str_replace

(PHP 4, PHP 5)

str_replaceReplace all occurrences of the search string with the replacement string

Description

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

This function returns a string or an array with all occurrences of search in subject replaced with the given replace value.

If you don't need fancy replacing rules (like regular expressions), you should always use this function instead of ereg_replace() or preg_replace().

Parameters

If search and replace are arrays, then str_replace() takes a value from each array and uses them to do search and replace on subject . If replace has fewer values than search , then an empty string is used for the rest of replacement values. 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.

If search or replace are arrays, their elements are processed first to last.

search

replace

subject

If subject is an array, then the search and replace is performed with every entry of subject , and the return value is an array as well.

count

Note: If passed, this will hold the number of matched and replaced needles.

Return Values

This function returns a string or an array with the replaced values.

Changelog

Version Description
5.0.0 The count parameter was added.
4.3.3 The behaviour of this function changed. In older versions a bug existed when using arrays as both search and replace parameters which caused empty search indexes to be skipped without advancing the internal pointer on the replace array. This has been corrected in PHP 4.3.3, any scripts which relied on this bug should remove empty search values prior to calling this function in order to mimic the original behavior.
4.0.5 Most parameters can now be an array.

Examples

Example #1 str_replace() examples

<?php
// Provides: <body text='black'>
$bodytag str_replace("%body%""black""<body text='%body%'>");

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

// Provides: 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);

// Use of the count parameter is available as of PHP 5.0.0
$str str_replace("ll""""good golly miss molly!"$count);
echo 
$count// 2

// Order of replacement
$str     "Line 1\nLine 2\rLine 3\r\nLine 4\n";
$order   = array("\r\n""\n""\r");
$replace '<br />';
// Processes \r\n's first so they aren't converted twice.
$newstr str_replace($order$replace$str);

// Outputs: apearpearle pear
$letters = array('a''p');
$fruit   = array('apple''pear');
$text    'a p';
$output  str_replace($letters$fruit$text);
echo 
$output;
?>

Notes

Note: This function is binary-safe.

Note: This function is case-sensitive. Use str_ireplace() for case-insensitive replace.

See Also



str_rot13> <str_repeat
Last updated: Tue, 30 Jun 2009
 
add a note add a note User Contributed Notes
str_replace
Alberto Lepe
16-Jun-2009 02:44
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"
moz667 at gmail dot com
21-May-2009 04:49
<?php
/*
This is a function for made recursive str_replaces in an array
*/
function recursive_array_replace($find, $replace, &$data) {
    if (
is_array($data)) {
        foreach (
$data as $key => $value) {
            if (
is_array($value)) {
               
recursive_array_replace($find, $replace, $data[$key]);
            } else {
               
$data[$key] = str_replace($find, $replace, $value);
            }
        }
    } else {
       
$data = str_replace($find, $replace, $data);
    }
}

$a = array();
$a['a'] = "a";
$a['b']['a'] = "ba";
$a['b']['b'] = "bb";
$a['c'] = "c";
$a['d']['a'] = "da";
$a['d']['b'] = "db";
$a['d']['c'] = "dc";
$a['d']['d'] = "dd";

echo
"Before Replaces";
print_r($a);

recursive_array_replace("a", "XXXX", $a);

echo
"After Replaces";
print_r($a);
?>
Anonymous
13-May-2009 05:25
I create a little function to transform "User@example.net" [to] "user AT example DOT net" and conversely.

<?php
function code_mail($email) {
    if(
preg_match('`^.+@.+\..{1,5}$`', $email)) { //email format
       
$email = str_replace('.', ' DOT ', $email); //replace . by dot
       
$email = str_replace('@', ' AT ', $email); //replace @ by at
       
return $email;
    }       
    else {
//not email format
       
return false;
    }
}
function
decode_mail($email) { //on décode...
   
$email = str_replace(' DOT ', '.', $email); //replace dot by .
   
$email = str_replace(' AT ', '@', $email); //replace at by @
   
return $email;
}
?>
Dany Alejandro Cabrera
20-Mar-2009 02:03
This is a function that filters a filename for nicer URLs. It doesn't turn the whole filename to lowercase (easy mod):

<?php
/*
 * Devuelve el nombre del archivo filtrado de la siguiente manera:
 * Los espacios sustituidos por '-'
 * Los acentos se quitan de las vocales
 * 'n' en vez de 'ñ'
 * Cualquier otro caracter especial diferente de ('_', '-', '.') se elimina
*/
function preparar_nom_archivo($nom_archivo)
{
   
$arr_busca = array(' ','á','à','â','ã','ª','Á','À',
   
'Â','Ã', 'é','è','ê','É','È','Ê','í','ì','î','Í',
   
'Ì','Î','ò','ó','ô', 'õ','º','Ó','Ò','Ô','Õ','ú',
   
'ù','û','Ú','Ù','Û','ç','Ç','Ñ','ñ');
   
$arr_susti = array('-','a','a','a','a','a','A','A',
   
'A','A','e','e','e','E','E','E','i','i','i','I','I',
   
'I','o','o','o','o','o','O','O','O','O','u','u','u',
   
'U','U','U','c','C','N','n');
   
$nom_archivo = trim(str_replace($arr_busca, $arr_susti, $nom_archivo));
    return
ereg_replace('[^A-Za-z0-9\_\.\-]', '', $nom_archivo);
}
?>

(you may delete the line breaks in the arrays) Sorry for the spanish. In english: Substitutes spaces with '-', accents turn into vocals, 'ñ' to 'n', deletes weird characters except ('_', '-', '.').

Cheers
Jorge Garza
24-Feb-2009 01:58
In order to create nicer urls i use this simple function:

<?php
function niceURL($string)
    {
$que = array( 'á','é','í','ó','ú','Á','É','Í','Ó','Ú','ñ','Ñ',' ' );
$por = array( 'a','e','i','o','u','A','E','I','O','U','n','n','-' );
  return
strtolower( str_replace( $que,$por,$string ) );
    }
?>

For string "Hello Cruel World"
This will return "hello-cruel-world"

However once i wrote this:

<?php
function niceURL($string)
    {
 
//changing the place of ' ' by '-' to the begining
$que = array( ' ','á','é','í','ó','ú','Á','É','Í','Ó','Ú','ñ','Ñ' );
$por = array( '-','a','e','i','o','u','A','E','I','O','U','n','n' );
  return
strtolower( str_replace( $que,$por,$string ) );
    }
?>

And for "Hello Cruel World"
This will return "hellocruelworld"

I have no idea why but it made me crazy for a while,
n0name
08-Feb-2009 09:41
simple bbcode

<?php

function bbcode($msg){
   
//bold
   
$msg = str_replace("[b]", "<b>", $msg);
   
$msg = str_replace("[/b]", "</b>", $msg);
   
//italic
   
$msg = str_replace("[i]", "<i>", $msg);
   
$msg = str_replace("[/i]", "</i>", $msg);
   
//image
   
$msg = str_replace("[img]", "<img src=\"", $msg);
   
$msg = str_replace("[/img]", "\" />", $msg);
   
#$msg = str_replace("", "", $msg);
   
return ($msg);
}

?>
thomas at tgohome dot com
03-Feb-2009 10:16
For those wanting a quick solution to replacing a string a certain number of times, starting from the left, this might be a solution:

<?php
echo implode("replace term", explode("search term", "input", $limit));
?>

Hope this helps.
michael dot moussa at gmail dot com
29-Jan-2009 02:38
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); // output: 'FFFFFF'
?>

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); // output: 'F'
?>

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
/**
* When using str_replace(...), values that did not exist in the original string (but were put there by previous
* replacements) will be replaced continuously.  This string replacement function is designed replace the values
* in $search with those in $replace while not factoring in prior replacements.  Note that this function will
* always look for the longest possible match first and then work its way down to individual characters.
*
* The "o" in "stro_replace" represents "original", indicating that the function operates only on the original string.
*
* @param array $search list of strings or characters that need to be replaced
* @param array $replace list of strings or characters that will replace the corresponding values in $search
* @param string $subject the string on which this operation is being performed
*
* @return string $subject with all substrings in the $search array replaced by the values in the $replace array
*/
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); // output: 'BCDEF'
?>

Some other examples:

<?php
$search
= array(' ', '&');
$replace = array('&nbsp;', '&amp;');
$subject = 'Hello & goodbye!';

// We want to replace the spaces with &nbsp; and the ampersand with &amp;
echo str_replace($search, $replace, $subject); // output: "Hello&amp;nbsp&amp;&amp;nbspgoodbye!" - wrong!

echo stro_replace($search, $replace, $subject); // output: "Hello&nbsp;&amp;&nbsp;goodbye!" - correct!

/*
    Note:  Run the above code in the CLI or view source on your web browser - the replacement strings for stro_replace are HTML entities which the browser interprets.
*/
?>

<?php
$search
= array('ERICA', 'AMERICA');
$replace = array('JON', 'PHP');
$subject = 'MIKE AND ERICA LIKE AMERICA';

// We want to replace the name "ERICA" with "JON" and the word "AMERICA" with "PHP"
echo str_replace($search, $replace, $subject); // output: "MIKE AND JON LIKE AMJON", which is not correct

echo stro_replace($search, $replace, $subject); // output: "MIKE AND JON LIKE PHP", which is correct
?>
robbiesmith79 at gmail dot com
12-Jan-2009 03:35
Came across a difference between Excel 2003 vs Excel 2007 documents and the different formats they push out csv files.

In 2007, the format pushes out the chr(13) instead of the \n in 2003.

Just as a safety precaution, do a quick replace on the fread contents from the excel file :-)

<?php
$lineseparator
= "\n";

// check for the user supplied list type format
if ($_REQUEST['listtype'] == "csv")
   
$fieldseparator = ",";
elseif (
$_REQUEST["listtype"] == "tab")
   
$fieldseparator = "\t";

// replaces the carriage return with the \n character
$csvcontent = str_replace(chr(13), $lineseparator,$csvcontent);

// then
foreach(split($lineseparator,$csvcontent) as $line) {
   
$lines++;
    if (
$lines >1) { // skips header row
       
$line = trim($line," \t");
       
$line = str_replace("\r","",$line);

       
// split the line up
       
$linearray = explode($fieldseparator,$line);
                           
       
// take care of The "Billy" the kid issue
       
for ($x = 0; $x<sizeof($linearray); $x++) {
           
$linearray[$x] = str_replace('""','^',$linearray[$x]);
           
$linearray[$x] = str_replace('""','^',$linearray[$x]);
           
$linearray[$x] = str_replace('"','',$linearray[$x]);
           
$linearray[$x] = str_replace('"','',$linearray[$x]);
           
$linearray[$x] = str_replace('^','"',$linearray[$x]);
        }

       
// then reference each element in order of the line by array and key
        // echo $linearray[0]; //, etc.

   
}

}
?>

Happy Coding!
php at katamari dot com dot br
09-Jan-2009 06:27
I´ve just made gabriel dot totoliciu at ddnet dot ro's function a little smaller, hope you like it.

NOTE: this function is not 100% secure, since the subject can have the temp replace

<?php

function stru_replace($search, $replace, $subject){
    if(!
is_array($search)) {
       
$search = array($search);
    }
   
    if(!
is_array($replace)){
       
$replace = array($replace);
    }
   
    foreach(
$search as $key => $value){
       
//used "|{}#PHP_IsAwesome" to try make the temp replace secure, the bigger the better
       
$subject = str_replace($value, "|{}#PHP_IsAwesome".$key."|{}#PHP_IsAwesome", $subject);
    }
   
    foreach(
$search as $key => $value){
       
$subject = str_replace("|{}#PHP_IsAwesome".$key."|{}#PHP_IsAwesome", $replace[$key], $subject);
    }       

    return(
$subject);
}
?>
Daniel Vidal
07-Dec-2008 12: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 03: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
02-Dec-2008 10: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
29-Oct-2008 11: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 06: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 05: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
06-Oct-2008 11: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<