/** * 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; }