123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- <?php
- /**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifier
- */
- /**
- * Smarty escape modifier plugin
- *
- * Type: modifier<br>
- * Name: escape<br>
- * Purpose: escape string for output
- *
- * @link http://smarty.php.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com>
- * @param string $string input string
- * @param string $esc_type escape type
- * @param string $char_set character set
- * @return string escaped input string
- */
- 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);
- case 'htmlall':
- return htmlentities($string, ENT_QUOTES, $char_set);
- case 'url':
- return rawurlencode($string);
- case 'urlpathinfo':
- return str_replace('%2F', '/', rawurlencode($string));
- case 'quotes':
- // escape unescaped single quotes
- return preg_replace("%(?<!\\\\)'%", "\\'", $string);
- case 'hex':
- // escape every character into hex
- $return = '';
- for ($x = 0; $x < strlen($string); $x++) {
- $return .= '%' . bin2hex($string[$x]);
- }
- return $return;
- case 'hexentity':
- $return = '';
- for ($x = 0; $x < strlen($string); $x++) {
- $return .= '&#x' . bin2hex($string[$x]) . ';';
- }
- return $return;
- case 'decentity':
- $return = '';
- for ($x = 0; $x < strlen($string); $x++) {
- $return .= '&#' . ord($string[$x]) . ';';
- }
- return $return;
- case 'javascript':
- // escape quotes and backslashes, newlines, etc.
- 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);
- }
- case 'nonstd':
- // escape non-standard chars, such as ms document quotes
- $_res = '';
- for($_i = 0, $_len = strlen($string); $_i < $_len; $_i++) {
- $_ord = ord(substr($string, $_i, 1));
- // non-standard char, escape it
- if ($_ord >= 126) {
- $_res .= '&#' . $_ord . ';';
- } else {
- $_res .= substr($string, $_i, 1);
- }
- }
- return $_res;
- default:
- return $string;
- }
- }
- ?>
|