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.
Beschreibung
Die Funktion gibt einen String oder ein Array zurück, in dem alle
Vorkommen von search innerhalb von
subject unabhängig von deren Groß- oder Kleinschreibung
gegen den entsprechenden replace-Wert ausgetauscht
wurden. Sofern Sie keine speziellen Ersetzungsregeln verwenden, sollten Sie
diese Funktion grundsätzlich anstelle von preg_replace()
mit i-Modifier verwenden.
Parameter-Liste
Wenn der search und replace
Arrays sind, nimmt str_ireplace() einen Wert von jedem
Array und sucht/ersetzt mit diesen im subject.
Wenn replace weniger Werte als
search besitzt, wird eine leere Zeichenkette für die
verbleibenden Ersetzungswerte verwendet.
Wenn search ein Array ist und
replace eine Zeichenkette, wird dieser
Ersetzungswert für alle Werte des search genutzt.
Die Umkehrung jedoch wäre sinnlos.
Wenn search oder replace
Array sind, werden ihre Elemente in aufsteigender Reihenfolge bearbeitet.
-
search -
Der gesuchte Wert, auch Nadel (needle) genannt. Ein Array kann genutzt werden, um mehrere Nadeln zu bestimmen.
-
replace -
Der Ersetzungswert, der gefundene
searchWerte ersetzt. Ein Array kann genutzt werden, um mehrere Nadeln zu bestimmen. -
subject -
Die zu durchsuchende und darin ersetzende Zeichenkette oder das Array, auch Heuhaufen (haystack) genannt.
Ist
subjectein Array, wird die Suchen-Ersetzen-Funktionalität auf jedes Element vonsubjectangewendet. Die Funktion gibt dann natürlich ein Array zurück. -
count -
Falls übergeben, wird dies auf die Anzahl der durchgeführten Ersetzungen gesetzt.
Rückgabewerte
Gibt eine Zeichenkette oder ein Array mit ersetzten Werten zurück.
Changelog
| Version | Beschreibung |
|---|---|
| 5.0.0 |
Der Parameter count wurde hinzugefügt.
|
Beispiele
Beispiel #1 str_ireplace()-Beispiel
<?php
$bodytag = str_ireplace("%body%", "schwarz", "<body text=%BODY%>");
?>
Anmerkungen
Hinweis: Diese Funktion ist binary safe.
Reihenfolge der Ersetzungen Überraschung
Weil str_ireplace() von links nach rechts ersetzt, kann sie einen zuvor eingesetzten Wert ersetzen, falls mehrere Ersetzungen durchgeführrt werden. Beispiel #2 in der Dokomenation von str_replace() zeigt, wie dies sie in der Praxis betreffen kann.
Siehe auch
- str_replace() - Ersetzt alle Vorkommen des Suchstrings durch einen anderen String
- preg_replace() - Sucht und ersetzt mit regulären Ausdrücken
- strtr() - Tauscht Zeichen aus oder ersetzt Zeichenketten
str_ireplace
12-Jun-2007 05:03
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);
}
}
?>
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); } }
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);
}
}
}
?>
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.
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
?>
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
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