1: <?php
2: /**
3: * Smarty plugin
4: *
5: * @package Smarty
6: * @subpackage PluginsModifier
7: */
8:
9: /**
10: * Smarty regex_replace modifier plugin
11: * Type: modifier<br>
12: * Name: regex_replace<br>
13: * Purpose: regular expression search/replace
14: *
15: * @link http://smarty.php.net/manual/en/language.modifier.regex.replace.php
16: * regex_replace (Smarty online manual)
17: * @author Monte Ohrt <monte at ohrt dot com>
18: *
19: * @param string $string input string
20: * @param string|array $search regular expression(s) to search for
21: * @param string|array $replace string(s) that should be replaced
22: *
23: * @return string
24: */
25: function smarty_modifier_regex_replace($string, $search, $replace)
26: {
27: if (is_array($search)) {
28: foreach ($search as $idx => $s) {
29: $search[$idx] = _smarty_regex_replace_check($s);
30: }
31: } else {
32: $search = _smarty_regex_replace_check($search);
33: }
34:
35: return preg_replace($search, $replace, $string);
36: }
37:
38: /**
39: * @param string $search string(s) that should be replaced
40: *
41: * @return string
42: * @ignore
43: */
44: function _smarty_regex_replace_check($search)
45: {
46: // null-byte injection detection
47: // anything behind the first null-byte is ignored
48: if (($pos = strpos($search, "\0")) !== false) {
49: $search = substr($search, 0, $pos);
50: }
51: // remove eval-modifier from $search
52: if (preg_match('!([a-zA-Z\s]+)$!s', $search, $match) && (strpos($match[1], 'e') !== false)) {
53: $search = substr($search, 0, - strlen($match[1])) . preg_replace('![e\s]+!', '', $match[1]);
54: }
55:
56: return $search;
57: }
58: