]> git.sur5r.net Git - contagged/blobdiff - smarty/plugins/modifier.escape.php
Smarty update to 2.6.14
[contagged] / smarty / plugins / modifier.escape.php
index dc7bae213cea417665b441995e973c8357d0111c..a2f52b232c1316ee9b7d0a2ea70cfc41c1b012c6 100644 (file)
  * Purpose:  Escape the string according to escapement type
  * @link http://smarty.php.net/manual/en/language.modifier.escape.php
  *          escape (Smarty online manual)
+ * @author   Monte Ohrt <monte at ohrt dot com>
  * @param string
  * @param html|htmlall|url|quotes|hex|hexentity|javascript
  * @return string
  */
-function smarty_modifier_escape($string, $esc_type = 'html')
+function smarty_modifier_escape($string, $esc_type = 'html', $char_set = 'ISO-8859-1')
 {
     switch ($esc_type) {
         case 'html':
-            return htmlspecialchars($string, ENT_QUOTES);
+            return htmlspecialchars($string, ENT_QUOTES, $char_set);
 
         case 'htmlall':
-            return htmlentities($string, ENT_QUOTES);
+            return htmlentities($string, ENT_QUOTES, $char_set);
 
         case 'url':
-            return urlencode($string);
+            return rawurlencode($string);
 
+        case 'urlpathinfo':
+            return str_replace('%2F','/',rawurlencode($string));
+            
         case 'quotes':
             // escape unescaped single quotes
             return preg_replace("%(?<!\\\\)'%", "\\'", $string);
 
-        case 'qp':
-            return smarty_modifier_escape_qp_enc($string);
-
-               case 'hex':
-                       // escape every character into hex
-                       $return = '';
-                       for ($x=0; $x < strlen($string); $x++) {
-                               $return .= '%' . bin2hex($string[$x]);
-                       }
-                       return $return;
+        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 '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 and newlines
-            return strtr($string, array('\\'=>'\\\\',"'"=>"\\'",'"'=>'\\"',"\r"=>'\\r',"\n"=>'\\n'));
+            // 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
+            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;
     }
 }
 
-function smarty_modifier_escape_qp_enc( $input = "") {
-   $hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
-   $escape  = "=";
-   $linlen  = strlen($input);
-   $newline = '';
-   for($i = 0; $i < $linlen; $i++) {
-     $c = substr( $input, $i, 1 );
-     $dec = ord( $c );
-     if( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ){
-       $h2 = floor($dec/16);
-       $h1 = floor($dec%16);
-       $c = $escape.$hex["$h2"].$hex["$h1"];
-     }
-     $newline .= $c;
-   }
-   return $newline;
-}
-
 /* vim: set expandtab: */
 
 ?>