diff --git a/change_log.txt b/change_log.txt index 87cfb356..f3f19213 100644 --- a/change_log.txt +++ b/change_log.txt @@ -1,4 +1,6 @@ ===== SVN trunk ===== +- bugfix mb_str_replace in replace and escape modifiers work with utf8 + 31/12/2010 - bugfix dynamic configuration of $debugging_crtl did not work - bugfix default value of $config_read_hidden changed to false diff --git a/libs/plugins/modifier.escape.php b/libs/plugins/modifier.escape.php index dae59268..37bc0e30 100644 --- a/libs/plugins/modifier.escape.php +++ b/libs/plugins/modifier.escape.php @@ -22,25 +22,6 @@ */ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = SMARTY_RESOURCE_CHAR_SET) { - if (!function_exists('mb_str_replace')) { - // simulate the missing PHP mb_str_replace function - function mb_str_replace($needles, $replacements, $haystack) - { - $rep = (array)$replacements; - foreach ((array)$needles as $key => $needle) { - $replacement = $rep[$key]; - $needle_len = mb_strlen($needle); - $replacement_len = mb_strlen($replacement); - $pos = mb_strpos($haystack, $needle, 0); - while ($pos !== false) { - $haystack = mb_substr($haystack, 0, $pos) . $replacement - . mb_substr($haystack, $pos + $needle_len); - $pos = mb_strpos($haystack, $needle, $pos + $replacement_len); - } - } - return $haystack; - } - } switch ($esc_type) { case 'html': return htmlspecialchars($string, ENT_QUOTES, $char_set); @@ -85,12 +66,8 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = SMARTY_ return strtr($string, array('\\' => '\\\\', "'" => "\\'", '"' => '\\"', "\r" => '\\r', "\n" => '\\n', ' '<\/')); case 'mail': - // safe way to display e-mail address on a web page - if (function_exists('mb_substr')) { - return mb_str_replace(array('@', '.'), array(' [AT] ', ' [DOT] '), $string); - } else { - return str_replace(array('@', '.'), array(' [AT] ', ' [DOT] '), $string); - } + require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php'); + return smarty_mb_str_replace(array('@', '.'), array(' [AT] ', ' [DOT] '), $string); case 'nonstd': // escape non-standard chars, such as ms document quotes diff --git a/libs/plugins/modifier.replace.php b/libs/plugins/modifier.replace.php index 98195ffb..0636a191 100644 --- a/libs/plugins/modifier.replace.php +++ b/libs/plugins/modifier.replace.php @@ -22,30 +22,8 @@ */ function smarty_modifier_replace($string, $search, $replace) { - if (!function_exists('mb_str_replace')) { - // simulate the missing PHP mb_str_replace function - function mb_str_replace($needles, $replacements, $haystack) - { - $rep = (array)$replacements; - foreach ((array)$needles as $key => $needle) { - $replacement = $rep[$key]; - $needle_len = mb_strlen($needle); - $replacement_len = mb_strlen($replacement); - $pos = mb_strpos($haystack, $needle, 0); - while ($pos !== false) { - $haystack = mb_substr($haystack, 0, $pos) . $replacement - . mb_substr($haystack, $pos + $needle_len); - $pos = mb_strpos($haystack, $needle, $pos + $replacement_len); - } - } - return $haystack; - } - } - if (function_exists('mb_substr')) { - return mb_str_replace($search, $replace, $string); - } else { - return str_replace($search, $replace, $string); - } + require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php'); + return smarty_mb_str_replace($search, $replace, $string); } ?> \ No newline at end of file diff --git a/libs/plugins/shared.mb_str_replace.php b/libs/plugins/shared.mb_str_replace.php new file mode 100644 index 00000000..8bc156f0 --- /dev/null +++ b/libs/plugins/shared.mb_str_replace.php @@ -0,0 +1,38 @@ + \ No newline at end of file