3 * @version $Id: str_ireplace.php,v 1.2 2007/08/12 01:20:46 harryf Exp $
8 //---------------------------------------------------------------
10 * UTF-8 aware alternative to str_ireplace
11 * Case-insensitive version of str_replace
12 * Note: requires utf8_strtolower
13 * Note: it's not fast and gets slower if $search / $replace is array
14 * Notes: it's based on the assumption that the lower and uppercase
15 * versions of a UTF-8 character will have the same length in bytes
16 * which is currently true given the hash table to strtolower
19 * @see http://www.php.net/str_ireplace
20 * @see utf8_strtolower
24 function utf8_ireplace($search, $replace, $str, $count = NULL){
26 if ( !is_array($search) ) {
28 $slen = strlen($search);
33 $lendif = strlen($replace) - strlen($search);
34 $search = utf8_strtolower($search);
36 $search = preg_quote($search);
37 $lstr = utf8_strtolower($str);
40 while ( preg_match('/(.*)'.$search.'/Us',$lstr, $matches) ) {
41 if ( $i === $count ) {
44 $mlen = strlen($matches[0]);
45 $lstr = substr($lstr, $mlen);
46 $str = substr_replace($str, $replace, $matched+strlen($matches[1]), $slen);
47 $matched += $mlen + $lendif;
54 foreach ( array_keys($search) as $k ) {
56 if ( is_array($replace) ) {
58 if ( array_key_exists($k,$replace) ) {
60 $str = utf8_ireplace($search[$k], $replace[$k], $str, $count);
64 $str = utf8_ireplace($search[$k], '', $str, $count);
70 $str = utf8_ireplace($search[$k], $replace, $str, $count);