1: | <?php
|
2: | |
3: | |
4: | |
5: | |
6: | |
7: |
|
8: | if (!function_exists('smarty_mb_str_replace')) {
|
9: | |
10: | |
11: | |
12: | |
13: | |
14: | |
15: | |
16: | |
17: | |
18: | |
19: |
|
20: | function smarty_mb_str_replace($search, $replace, $subject, &$count = 0)
|
21: | {
|
22: | if (!is_array($search) && is_array($replace)) {
|
23: | return false;
|
24: | }
|
25: | if (is_array($subject)) {
|
26: |
|
27: | foreach ($subject as &$string) {
|
28: | $string = smarty_mb_str_replace($search, $replace, $string, $c);
|
29: | $count += $c;
|
30: | }
|
31: | } elseif (is_array($search)) {
|
32: | if (!is_array($replace)) {
|
33: | foreach ($search as &$string) {
|
34: | $subject = smarty_mb_str_replace($string, $replace, $subject, $c);
|
35: | $count += $c;
|
36: | }
|
37: | } else {
|
38: | $n = max(count($search), count($replace));
|
39: | while ($n--) {
|
40: | $subject = smarty_mb_str_replace(current($search), current($replace), $subject, $c);
|
41: | $count += $c;
|
42: | next($search);
|
43: | next($replace);
|
44: | }
|
45: | }
|
46: | } else {
|
47: | $mb_reg_charset = mb_regex_encoding();
|
48: |
|
49: | $reg_is_unicode = !strcasecmp($mb_reg_charset, "UTF-8");
|
50: | if(!$reg_is_unicode) {
|
51: |
|
52: | mb_regex_encoding("UTF-8");
|
53: | }
|
54: |
|
55: |
|
56: | $current_charset = mb_regex_encoding();
|
57: | $convert_result = (bool)strcasecmp(Smarty::$_CHARSET, $current_charset);
|
58: | if($convert_result) {
|
59: |
|
60: | $subject = mb_convert_encoding($subject, $current_charset, Smarty::$_CHARSET);
|
61: | $search = mb_convert_encoding($search, $current_charset, Smarty::$_CHARSET);
|
62: | $replace = mb_convert_encoding($replace, $current_charset, Smarty::$_CHARSET);
|
63: | }
|
64: |
|
65: | $parts = mb_split(preg_quote($search), $subject);
|
66: |
|
67: | if(!$reg_is_unicode) {
|
68: |
|
69: | mb_regex_encoding($mb_reg_charset);
|
70: | }
|
71: | if($parts === false) {
|
72: |
|
73: |
|
74: |
|
75: | throw new SmartyException("Source string is not a valid $current_charset sequence (probably)");
|
76: | }
|
77: |
|
78: | $count = count($parts) - 1;
|
79: | $subject = implode($replace, $parts);
|
80: |
|
81: | if($convert_result) {
|
82: | $subject = mb_convert_encoding($subject, Smarty::$_CHARSET, $current_charset);
|
83: | }
|
84: | }
|
85: | return $subject;
|
86: | }
|
87: | }
|
88: | |