Example #1
0
 /**
  * Converts charset of search criteria string
  *
  * @param  string  $str          Search string
  * @param  string  $charset      Original charset
  * @param  string  $dest_charset Destination charset (default US-ASCII)
  *
  * @return string  Search string
  */
 public static function convert_criteria($str, $charset, $dest_charset = 'US-ASCII')
 {
     // convert strings to US_ASCII
     if (preg_match_all('/\\{([0-9]+)\\}\\r\\n/', $str, $matches, PREG_OFFSET_CAPTURE)) {
         $last = 0;
         $res = '';
         foreach ($matches[1] as $m) {
             $string_offset = $m[1] + strlen($m[0]) + 4;
             // {}\r\n
             $string = substr($str, $string_offset - 1, $m[0]);
             $string = rcube_charset::convert($string, $charset, $dest_charset);
             if ($string === false || !strlen($string)) {
                 continue;
             }
             $res .= substr($str, $last, $m[1] - $last - 1) . rcube_imap_generic::escape($string);
             $last = $m[0] + $string_offset - 1;
         }
         if ($last < strlen($str)) {
             $res .= substr($str, $last, strlen($str) - $last);
         }
     } else {
         $res = $str;
     }
     return $res;
 }