Skip to content
Snippets Groups Projects
Select Git revision
  • a15e2766d2fb9feb6c619f9497a4e1c9122a114a
  • master default protected
  • replication_test
  • release-1.10 protected
  • dev protected
  • 556-usage-statistics
  • 553-semantic-recommendation-2
  • 553-semantic-recommendation
  • release-1.9 protected
  • 551-init-broker-service-permissions
  • 549-test-oai-pmh
  • 545-saving-multiple-times-breaks-pid-metadata
  • 499-standalone-compute-service-2
  • 539-load-tests
  • hotfix/helm-chart
  • luca_ba_new_interface
  • 534-bug-when-adding-access-to-user-that-is-not-registered-at-dashboard-service
  • release-1.8 protected
  • 533-integrate-semantic-recommendation
  • feature/openshift
  • 518-spark-doesn-t-map-the-headers-correct
  • v1.10.4 protected
  • v1.10.3 protected
  • v1.10.2 protected
  • v1.10.1 protected
  • v1.10.0-rc13 protected
  • v1.10.0-rc12 protected
  • v1.10.0-rc11 protected
  • v1.10.0-rc10 protected
  • v1.10.0-rc9 protected
  • v1.10.0-rc8 protected
  • v1.10.0-rc7 protected
  • v1.10.0-rc6 protected
  • v1.10.0-rc5 protected
  • v1.10.0-rc4 protected
  • v1.10.0-rc3 protected
  • v1.10.0-rc2 protected
  • v1.10.0rc1 protected
  • v1.10.0rc0 protected
  • v1.10.0 protected
  • v1.9.3 protected
41 results

README.md

Blame
  • modifiercompiler.escape.php 5.00 KiB
    <?php
    /**
     * Smarty plugin
     *
     * @package    Smarty
     * @subpackage PluginsModifierCompiler
     */
    /**
     * Smarty escape modifier plugin
     * Type:     modifier
     * 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
     * @param Smarty_Internal_TemplateCompilerBase $compiler
     *
     * @return string with compiled code
     * @throws \SmartyException
     */
    function smarty_modifiercompiler_escape($params, Smarty_Internal_TemplateCompilerBase $compiler)
    {
        static $_double_encode = null;
        static $is_loaded = false;
        $compiler->template->_checkPlugins(
            array(
                array(
                    'function' => 'smarty_literal_compiler_param',
                    'file'     => SMARTY_PLUGINS_DIR . 'shared.literal_compiler_param.php'
                )
            )
        );
        if ($_double_encode === null) {
            $_double_encode = version_compare(PHP_VERSION, '5.2.3', '>=');
        }
        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':
                    if ($_double_encode) {
                        return 'htmlspecialchars(' . $params[ 0 ] . ', ENT_QUOTES, ' . var_export($char_set, true) . ', ' .
                               var_export($double_encode, true) . ')';
                    } elseif ($double_encode) {
                        return 'htmlspecialchars(' . $params[ 0 ] . ', ENT_QUOTES, ' . var_export($char_set, true) . ')';
                    } else {
                        // fall back to modifier.escape.php
                    }
                // no break
                case 'htmlall':
                    if (Smarty::$_MBSTRING) {
                        if ($_double_encode) {
                            // php >=5.2.3 - go native
                            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) . ')';
                        } elseif ($double_encode) {
                            // php <5.2.3 - only handle double encoding
                            return 'mb_convert_encoding(htmlspecialchars(' . $params[ 0 ] . ', ENT_QUOTES, ' .
                                   var_export($char_set, true) . '), "HTML-ENTITIES", ' . var_export($char_set, true) . ')';
                        } else {
                            // fall back to modifier.escape.php
                        }
                    }
                    // no MBString fallback
                    if ($_double_encode) {
                        // php >=5.2.3 - go native
                        return 'htmlentities(' . $params[ 0 ] . ', ENT_QUOTES, ' . var_export($char_set, true) . ', ' .
                               var_export($double_encode, true) . ')';
                    } elseif ($double_encode) {
                        // php <5.2.3 - only handle double encoding
                        return 'htmlentities(' . $params[ 0 ] . ', ENT_QUOTES, ' . var_export($char_set, true) . ')';
                    } else {
                        // fall back to modifier.escape.php
                    }
                // no break
                case 'url':
                    return 'rawurlencode(' . $params[ 0 ] . ')';
                case 'urlpathinfo':
                    return 'str_replace("%2F", "/", rawurlencode(' . $params[ 0 ] . '))';
                case 'quotes':
                    // escape unescaped single quotes
                    return 'preg_replace("%(?<!\\\\\\\\)\'%", "\\\'",' . $params[ 0 ] . ')';
                case 'javascript':
                    // escape quotes and backslashes, newlines, etc.
                    return 'strtr(' .
                           $params[ 0 ] .
                           ', array("\\\\" => "\\\\\\\\", "\'" => "\\\\\'", "\"" => "\\\\\"", "\\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->template->caching && ($compiler->tag_nocache | $compiler->nocache)) {
            $compiler->required_plugins[ 'nocache' ][ 'escape' ][ 'modifier' ][ 'file' ] =
                SMARTY_PLUGINS_DIR . 'modifier.escape.php';
            $compiler->required_plugins[ 'nocache' ][ 'escape' ][ 'modifier' ][ 'function' ] =
                'smarty_modifier_escape';
        } else {
            $compiler->required_plugins[ 'compiled' ][ 'escape' ][ 'modifier' ][ 'file' ] =
                SMARTY_PLUGINS_DIR . 'modifier.escape.php';
            $compiler->required_plugins[ 'compiled' ][ 'escape' ][ 'modifier' ][ 'function' ] =
                'smarty_modifier_escape';
        }
        return 'smarty_modifier_escape(' . join(', ', $params) . ')';
    }