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

search for in the

str_pad> <str_getcsv
Last updated: Fri, 05 Sep 2008

view this page in

str_ireplace

(PHP 5)

str_ireplace大文字小文字を区別しない str_replace()

説明

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

この関数は、subject の中に現れるすべての search (大文字小文字を区別しない)を replace に置き換えた文字列あるいは配列を 返します。一般に、凝った置換ルールが必要ないのであれば、 eregi_replace() あるいは preg_replace()i 修正子を 使用するかわりにこの関数を使用すべきです。

パラメータ

search

注意: すべての search 配列による置換は、 直前の置換の結果に対して作用します。

replace

subject

subject が配列の場合は、そのすべての要素に 対して検索と置換が行われ、返される結果も配列となります。

count

needles の中で、マッチして置換を行った数を count に返します。このパラメータは参照渡しとします。

search および replace が配列の場合は、 str_ireplace() はそれぞれの配列から取り出した 値を使用して subject の置換を行います。 replace の要素数が search より少ない場合は、残りの要素は 空の文字列に置き換えられます。もし search が配列で replace が文字列だった場合は すべての search が同じ文字列に置き換えられます。

返り値

置換した文字列あるいは配列を返します。

変更履歴

バージョン 説明
5.0.0 count パラメータが追加されました。

例1 str_ireplace() の例

<?php
$bodytag 
str_ireplace("%body%""black""<body text=%BODY%>");
?>

注意

注意: この関数はバイナリセーフです。



str_pad> <str_getcsv
Last updated: Fri, 05 Sep 2008
 
add a note add a note User Contributed Notes
str_ireplace
a dot lyskawa at pp-layouts dot com
10-Aug-2008 11:41
I'm really sorry, there is a big bug in my previous mb_str_ireplace function: here's the correct one:

<?php

/**
 * Case insensitive multi-byte safe str_ireplace
 * @param string $search
 * @param string $replace
 * @param string $subject
 * @param int $count
 * @param string $encoding
 * @return string
 */
function mb_str_ireplace($search, $replace, $subject, $count = null, $encoding = u8) {
 
$l1 = mb_strlen($search, $encoding);
 
$l2 = mb_strlen($replace, $encoding);
 
$rc = 0;
 
$offset = 0;
  while(
ok($p = mb_stripos($subject, $search, $offset, $encoding)) && (is_null($count) || $rc <= $count)) {
    if (
ok($p))
     
$subject = mb_substr($subject, 0, $p, $encoding) . $replace . mb_substr($subject, $p + $l1, mb_strlen($subject, $encoding), $encoding);
   
$offset = $p + $l2;
   
$rc++;
  }
  return
$subject;
}

?>

To make it mb_str_replace - change stripos to strpos. I'm sorry for previous bug, well, this one is tested.

I wonder should I publish my growing mb_ functions library like WORKING mb_wordwrap WITHOUT regexes (faster)... E-mail me.
a dot lyskawa at pp-layouts dot com
06-Aug-2008 02:07
It's obvious str_ireplace() won't be multi-byte safe. Function mb_str_ireplace() is missing in php, so here's mine:

<?php
/**
 * Case insensitive multi-byte safe str_replace
 * @param string $search
 * @param string $replace
 * @param string $subject
 * @param int $count
 * @param string $encoding
 * @return string
 */
function mb_str_ireplace($search, $replace, $subject, $count = null, $encoding = 'utf-8') {
 
$l1 = mb_strlen($search, $encoding);
 
$rc = 0;
 
$offset = 0;
  while (
ok($p = mb_stripos($subject, $search, $offset, $encoding)) && (is_null($rc) || $rc <= $count)) {
    if (
ok($p)) $subject = mb_substr($subject, $offset, $p, $encoding) . $replace . mb_substr($subject, $p + $l1, mb_strlen($subject, $encoding), $encoding);
   
$offset = $p + $l1;
   
$rc++;
  }
  return
$subject;
}
?>

It works exactly like original str_ireplace() and defaults to 'utf-8' encoding. Replace with null if you like. Well, it's surely slower than built-in functions, however it's one of the fastest ways to do the trick.
jgriggs777 at yahoo dot com
06-Jun-2008 04:27
My apologies.  I'm a PHP newbie and the count function on my script below didn't work right if you have more than one "keyword".  I searched and spent a long time to get this to work right, so wanted to share it.

This is very easy to use by doing the following.

$text - is the text to search
$words - are the words to highlight (search text)
$the_place - is so that you can tell your users what "area" was searched.

<?php

function highlight_this($text, $words, $the_place) {
   
$words = trim($words);
   
$the_count = 0;
   
$wordsArray = explode(' ', $words);
        foreach(
$wordsArray as $word) {
         if(
strlen(trim($word)) != 0)
        
        
//exclude these words from being replaced
        
$exclude_list = array("word1", "word2", "word3");
       
// Check if it's excluded
       
if ( in_array( strtolower($word), $exclude_list ) ) {
   
        } else {
           
$text = str_ireplace($word, "<span class=\"highlight\">".strtoupper($word)."</span>", $text, $count);
           
$the_count = $count + $the_count;
            }
           
    }
   
//added to show how many keywords were found
   
echo "<br><div class=\"emphasis\">A search for <strong>" . $words. "</strong> found <strong>" . $the_count . "</strong> matches within the " . $the_place. ".</div><br>";
   
    return
$text;
}

//example of how to use
$text_to_highlight = highlight_this($text_to_highlight, $search_text, "Place you searched");

?>
Anonymous
05-Jun-2008 09:58
I modified a script from notes on the eregi_replace() function page.  This is a highlight script that worked good for me.

$text - is the text to search
$words - are the words to highlight (search text)
$the_place - is so that you can tell your users what "area" was searched.

<?php
function highlight_this($text, $words, $the_place) {
   
$words = trim($words);
   
$wordsArray = explode(' ', $words);
    foreach(
$wordsArray as $word) {
        if(
strlen(trim($word)) != 0)
           
$text = str_ireplace($word, "<span class=\"highlight\">".strtoupper($word)."</span>", $text, $count);
    }
   
//added to show how many keywords were found
   
echo "<br><div class=\"emphasis\">A search for <strong>" . $words. "</strong> found <strong>" . $count . "</strong> matches within the " . $the_place. ".</div><br>";
   
   
//end script modification
   
return $text;
}
?>
mvpetrovich
16-Feb-2008 12:28
Here are some minor tweaks to-n00b-at-battleofthebits-dot-org's excellent function.
1) The token was set to an ASCII value 1 (which could be changed as was previously noted)
2) The $c++ was not needed
3) The while statement is not necessary for the final replacement
4) Note that this does not allow use of arrays for search and replace terms.  That could be implemented using loops.

<?php
if(!function_exists('str_ireplace')){
  function
str_ireplace($search,$replace,$subject){
   
$token = chr(1);
   
$haystack = strtolower($subject);
   
$needle = strtolower($search);
    while ((
$pos=strpos($haystack,$needle))!==FALSE){
     
$subject = substr_replace($subject,$token,$pos,strlen($search));
     
$haystack = substr_replace($haystack,$token,$pos,strlen($search));
    }
   
$subject = str_replace($token,$replace,$subject);
    return
$subject;
  }
}
?>
n00b at battleofthebits dot org
21-Jul-2007 08:54
Dreamhost hasn't upgraded to PHP 5.0 -- I came up with my own alternative, trying to make it run as much like str_ireplace() as possible.  Adjust the switch-a-roo token if you think it may conflict with your needle in teh haystack.

## HOMEBREW str_ireplace() FOR PRE-PHP 5.0
if (!function_exists('str_ireplace')  {
  function str_ireplace($search,$replace,$subject) {
    $token = '^[[term^]';
    $haystack = strtolower($subject);
    $needle = strtolower($search);
    while (($pos=strpos($haystack,$needle))!==FALSE)  {
      $c++;
      $subject = substr_replace($subject,$token,$pos,strlen($search));
      $haystack = substr_replace($haystack,$token,$pos,strlen($search));
    }
    while (($pos=strpos($subject,$token))!==FALSE)  {
      $subject = substr_replace($subject,$replace,$pos,strlen($token));
    }
    return $subject;
  }
}
lev at taintedthoughts dot com
12-Jun-2007 05:03
There appears to be a "bug" with this function in at least version 5.2.1.

If you attempt to use the function while replacing special characters, such as new lines, it will cause your entire scripts to fail. It resulted in my browser (Firefox 2) trying to download the file instead of parsing it.

Here is example code which will cause problems:

<?php

$sometext
= "this is some text\n";
$sometext .= "that has a new line in it";

echo
break_lines($sometext);

function
break_lines ($text)
 {
 return
str_ireplace("\n", "<br/>", $text);
 }

?>

However, if you simply get rid of the "i" and use the normal str_replace, the page will load just fine.

I have also tried the same code on 5.2.3 and this version does NOT have the same problem, so it does appear to be an issue that was resolved with the newest builds of php.

I don't think it was a result of my personal environment, but I am running Debian-Sarge, Apache 2 and PHP 5.2.1/5.2.3.
hans111 at yahoo dot com
31-Jan-2007 01:26
Yet another one str_ireplace ireplacement, this one will take arrays as $search and $replace

<?php
function make_pattern(&$pat, $key) {
  
$pat = '/'.preg_quote($pat, '/').'/i';
}
if(!
function_exists('str_ireplace')){
    function
str_ireplace($search, $replace, $subject){
        if(
is_array($search)){
           
array_walk($search, 'make_pattern');
        }
        else{
           
$search = '/'.preg_quote($search, '/').'/i';
        }
        return
preg_replace($search, $replace, $subject);
    }
}
?>
René Johnson
05-Nov-2006 09:37
str_ireplace for php below version 5. :)

if(!function_exists('str_ireplace')) {
function str_ireplace($search,$replace,$subject) {
$search = preg_quote($search, "/");
return preg_replace("/".$search."/i", $replace, $subject); } }
hans111
02-Aug-2006 10:25
<?php
if(!function_exists('str_ireplace')) {
    function
str_ireplace($search, $replacement, $string){
       
$delimiters = array(1,2,3,4,5,6,7,8,14,15,16,17,18,19,20,21,22,23,24,25,
       
26,27,28,29,30,31,33,247,215,191,190,189,188,187,186,
       
185,184,183,182,180,177,176,175,174,173,172,171,169,
       
168,167,166,165,164,163,162,161,157,155,153,152,151,
       
150,149,148,147,146,145,144,143,141,139,137,136,135,
       
134,133,132,130,129,128,127,126,125,124,123,96,95,94,
       
63,62,61,60,59,58,47,46,45,44,38,37,36,35,34);
        foreach (
$delimiters as $d) {
            if (
strpos($string, chr($d))===false){
               
$delimiter = chr($d);
                break;
            }
        }
        if (!empty(
$delimiter)) {
            return
preg_replace($delimiter.quotemeta($search).$delimiter.'i', $replacement, $string);
        }
        else { 
           
trigger_error('Homemade str_ireplace could not find a proper delimiter.', E_USER_ERROR);
        }
    }
}
?>
hfuecks at nospam dot org
04-Jul-2005 11:07
Note that character case is being defined by your server's locale setting, which effects strings containing non-ASCII characters.

See strtolower() - http://www.php.net/strtolower and comments - internally str_ireplace converts $search and $replace to lowercase to find matches.
daevid at daevid dot com
05-Apr-2005 10:14
here's a neat little function I whipped up to do HTML color coding of SQL strings.

<?php
/**
 * Output the HTML debugging string in color coded glory for a sql query
 * This is very nice for being able to see many SQL queries
 * @access     public
 * @return     void. prints HTML color coded string of the input $query.
 * @param     string $query The SQL query to be executed.
 * @author     Daevid Vincent [daevid@LockdownNetworks.com]
 *  @version     1.0
 * @date        04/05/05
 * @todo     highlight SQL functions.
 */
function SQL_DEBUG( $query )
{
    if(
$query == '' ) return 0;

    global
$SQL_INT;
    if( !isset(
$SQL_INT) ) $SQL_INT = 0;

   
//[dv] this has to come first or you will have goofy results later.
   
$query = preg_replace("/['\"]([^'\"]*)['\"]/i", "'<FONT COLOR='#FF6600'>$1</FONT>'", $query, -1);

   
$query = str_ireplace(
                            array (
                                   
'*',
                                   
'SELECT ',
                                   
'UPDATE ',
                                   
'DELETE ',
                                   
'INSERT ',
                                   
'INTO',
                                   
'VALUES',
                                   
'FROM',
                                   
'LEFT',
                                   
'JOIN',
                                   
'WHERE',
                                   
'LIMIT',
                                   
'ORDER BY',
                                   
'AND',
                                   
'OR ', //[dv] note the space. otherwise you match to 'COLOR' ;-)
                                   
'DESC',
                                   
'ASC',
                                   
'ON '
                                 
),
                            array (
                                   
"<FONT COLOR='#FF6600'><B>*</B></FONT>",
                                   
"<FONT COLOR='#00AA00'><B>SELECT</B> </FONT>",
                                   
"<FONT COLOR='#00AA00'><B>UPDATE</B> </FONT>",
                                   
"<FONT COLOR='#00AA00'><B>DELETE</B> </FONT>",
                                   
"<FONT COLOR='#00AA00'><B>INSERT</B> </FONT>",
                                   
"<FONT COLOR='#00AA00'><B>INTO</B></FONT>",
                                   
"<FONT COLOR='#00AA00'><B>VALUES</B></FONT>",
                                   
"<FONT COLOR='#00AA00'><B>FROM</B></FONT>",
                                   
"<FONT COLOR='#00CC00'><B>LEFT</B></FONT>",
                                   
"<FONT COLOR='#00CC00'><B>JOIN</B></FONT>",
                                   
"<FONT COLOR='#00AA00'><B>WHERE</B></FONT>",
                                   
"<FONT COLOR='#AA0000'><B>LIMIT</B></FONT>",
                                   
"<FONT COLOR='#00AA00'><B>ORDER BY</B></FONT>",
                                   
"<FONT COLOR='#0000AA'><B>AND</B></FONT>",
                                   
"<FONT COLOR='#0000AA'><B>OR</B> </FONT>",
                                   
"<FONT COLOR='#0000AA'><B>DESC</B></FONT>",
                                   
"<FONT COLOR='#0000AA'><B>ASC</B></FONT>",
                                   
"<FONT COLOR='#00DD00'><B>ON</B> </FONT>"
                                 
),
                           
$query
                         
);

    echo
"<FONT COLOR='#0000FF'><B>SQL[".$SQL_INT."]:</B> ".$query."<FONT COLOR='#FF0000'>;</FONT></FONT><BR>\n";

   
$SQL_INT++;

}
//SQL_DEBUG
?>
aidan at php dot net
21-Aug-2004 09:58
If you want to do string highlighting, for example highlighting search terms, try str_highlight().

http://aidanlister.com/repos/v/function.str_highlight.php
aidan at php dot net
30-May-2004 07:36
This functionality is now implemented in the PEAR package PHP_Compat.

More information about using this function without upgrading your version of PHP can be found on the below link:

http://pear.php.net/package/PHP_Compat

str_pad> <str_getcsv
Last updated: Fri, 05 Sep 2008
 
 
show source | credits | sitemap | contact | advertising | mirror sites