Initial Kohana install
[speedfreak] / Server / system / core / utf8 / str_ireplace.php
1 <?php defined('SYSPATH') OR die('No direct access allowed.');
2 /**
3  * utf8::str_ireplace
4  *
5  * @package    Core
6  * @author     Kohana Team
7  * @copyright  (c) 2007 Kohana Team
8  * @copyright  (c) 2005 Harry Fuecks
9  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt
10  */
11 function _str_ireplace($search, $replace, $str, & $count = NULL)
12 {
13         if (utf8::is_ascii($search) AND utf8::is_ascii($replace) AND utf8::is_ascii($str))
14                 return str_ireplace($search, $replace, $str, $count);
15
16         if (is_array($str))
17         {
18                 foreach ($str as $key => $val)
19                 {
20                         $str[$key] = utf8::str_ireplace($search, $replace, $val, $count);
21                 }
22                 return $str;
23         }
24
25         if (is_array($search))
26         {
27                 $keys = array_keys($search);
28
29                 foreach ($keys as $k)
30                 {
31                         if (is_array($replace))
32                         {
33                                 if (array_key_exists($k, $replace))
34                                 {
35                                         $str = utf8::str_ireplace($search[$k], $replace[$k], $str, $count);
36                                 }
37                                 else
38                                 {
39                                         $str = utf8::str_ireplace($search[$k], '', $str, $count);
40                                 }
41                         }
42                         else
43                         {
44                                 $str = utf8::str_ireplace($search[$k], $replace, $str, $count);
45                         }
46                 }
47                 return $str;
48         }
49
50         $search = utf8::strtolower($search);
51         $str_lower = utf8::strtolower($str);
52
53         $total_matched_strlen = 0;
54         $i = 0;
55
56         while (preg_match('/(.*?)'.preg_quote($search, '/').'/s', $str_lower, $matches))
57         {
58                 $matched_strlen = strlen($matches[0]);
59                 $str_lower = substr($str_lower, $matched_strlen);
60
61                 $offset = $total_matched_strlen + strlen($matches[1]) + ($i * (strlen($replace) - 1));
62                 $str = substr_replace($str, $replace, $offset, strlen($search));
63
64                 $total_matched_strlen += $matched_strlen;
65                 $i++;
66         }
67
68         $count += $i;
69         return $str;
70 }