From 51609351f2c4b5082b7e6f0744cd3811c325303f Mon Sep 17 00:00:00 2001 From: emkael Date: Tue, 11 Oct 2016 14:01:29 +0200 Subject: * initial template --- lib/smarty/plugins/modifiercompiler.escape.php | 90 ++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 lib/smarty/plugins/modifiercompiler.escape.php (limited to 'lib/smarty/plugins/modifiercompiler.escape.php') diff --git a/lib/smarty/plugins/modifiercompiler.escape.php b/lib/smarty/plugins/modifiercompiler.escape.php new file mode 100644 index 0000000..b4cd3c8 --- /dev/null +++ b/lib/smarty/plugins/modifiercompiler.escape.php @@ -0,0 +1,90 @@ + + * Name: escape
+ * Purpose: escape string for output + * + * @link http://www.smarty.net/docsv2/en/language.modifier.escape count_characters (Smarty online manual) + * @author Rodney Rehm + * @param array $params parameters + * @return string with compiled code + */ +function smarty_modifiercompiler_escape($params, $compiler) +{ + try { + $esc_type = smarty_literal_compiler_param($params, 1, 'html'); + $char_set = smarty_literal_compiler_param($params, 2, Smarty::$_CHARSET); + $double_encode = smarty_literal_compiler_param($params, 3, true); + + if (!$char_set) { + $char_set = Smarty::$_CHARSET; + } + + switch ($esc_type) { + case 'html': + return 'htmlspecialchars(' + . $params[0] .', ENT_QUOTES, ' + . var_export($char_set, true) . ', ' + . var_export($double_encode, true) . ')'; + + case 'htmlall': + if (Smarty::$_MBSTRING) { + return 'mb_convert_encoding(htmlspecialchars(' + . $params[0] .', ENT_QUOTES, ' + . var_export($char_set, true) . ', ' + . var_export($double_encode, true) + . '), "HTML-ENTITIES", ' + . var_export($char_set, true) . ')'; + } + + // no MBString fallback + return 'htmlentities(' + . $params[0] .', ENT_QUOTES, ' + . var_export($char_set, true) . ', ' + . var_export($double_encode, true) . ')'; + + case 'url': + return 'rawurlencode(' . $params[0] . ')'; + + case 'urlpathinfo': + return 'str_replace("%2F", "/", rawurlencode(' . $params[0] . '))'; + + case 'quotes': + // escape unescaped single quotes + return 'preg_replace("%(? "\\\\\\\\", "\'" => "\\\\\'", "\"" => "\\\\\"", "\\r" => "\\\\r", "\\n" => "\\\n", " "<\/" ))'; + + } + } catch(SmartyException $e) { + // pass through to regular plugin fallback + } + + // could not optimize |escape call, so fallback to regular plugin + if ($compiler->tag_nocache | $compiler->nocache) { + $compiler->template->required_plugins['nocache']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR .'modifier.escape.php'; + $compiler->template->required_plugins['nocache']['escape']['modifier']['function'] = 'smarty_modifier_escape'; + } else { + $compiler->template->required_plugins['compiled']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR .'modifier.escape.php'; + $compiler->template->required_plugins['compiled']['escape']['modifier']['function'] = 'smarty_modifier_escape'; + } + return 'smarty_modifier_escape(' . join( ', ', $params ) . ')'; +} + +?> \ No newline at end of file -- cgit v1.2.3