diff options
| author | thomasb <thomasb@208e9e7b-5314-0410-a742-e7e81cd9613c> | 2006-08-04 13:56:08 +0000 |
|---|---|---|
| committer | thomasb <thomasb@208e9e7b-5314-0410-a742-e7e81cd9613c> | 2006-08-04 13:56:08 +0000 |
| commit | 854aabdeff98226db23547d7c101e4f4477210f0 (patch) | |
| tree | be47cae1990929292d017bfa550e4d8d6469e617 | |
| parent | 9a583b03aa7f8ad556af285a82a7d5a86cabbd5a (diff) | |
Added correct charset support for message searching
git-svn-id: https://svn.roundcube.net/trunk@293 208e9e7b-5314-0410-a742-e7e81cd9613c
| -rw-r--r-- | roundcubemail/program/include/rcube_imap.inc | 12 | ||||
| -rw-r--r-- | roundcubemail/program/steps/mail/search.inc | 19 |
2 files changed, 21 insertions, 10 deletions
diff --git a/roundcubemail/program/include/rcube_imap.inc b/roundcubemail/program/include/rcube_imap.inc index be89bd6b1..7f74eb7d9 100644 --- a/roundcubemail/program/include/rcube_imap.inc +++ b/roundcubemail/program/include/rcube_imap.inc @@ -827,13 +827,19 @@ class rcube_imap * @return array search results as list of message ids * @access public */ - function search($mbox_name='', $criteria='ALL', $str=NULL) + function search($mbox_name='', $criteria='ALL', $str=NULL, $charset=NULL) { $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox; if ($str && $criteria) { - $criteria = 'CHARSET UTF-8 '.$criteria.' "'.UTF7EncodeString($str).'"'; - return $this->_search_index($mailbox, $criteria); + $search = (!empty($charset) ? "CHARSET $charset " : '') . sprintf("%s {%d}\r\n%s", $criteria, strlen($str), $str); + $results = $this->_search_index($mailbox, $search); + + // try search without charset (probably not supported by server) + if (empty($results)) + $results = $this->_search_index($mailbox, "$criteria $str"); + + return $results; } else return $this->_search_index($mailbox, $criteria); diff --git a/roundcubemail/program/steps/mail/search.inc b/roundcubemail/program/steps/mail/search.inc index 142411443..517ef3008 100644 --- a/roundcubemail/program/steps/mail/search.inc +++ b/roundcubemail/program/steps/mail/search.inc @@ -8,6 +8,7 @@ | | +-----------------------------------------------------------------------+ | Author: Benjamin Smith <defitro@gmail.com> | + | Thomas Bruederli <roundcube@gmail.com> | +-----------------------------------------------------------------------+ */ @@ -18,6 +19,10 @@ $REMOTE_REQUEST = TRUE; $IMAP->set_page(1); $_SESSION['page'] = 1; +// search query comes in with ISO encoding because javascript escape() +// uses ISO-8859-1. Better handling for that will follow. +$imap_charset = 'ISO-8859-1'; + // get search string $str = get_input_value('_search', RCUBE_INPUT_GET); $mbox = get_input_value('_mbox', RCUBE_INPUT_GET); @@ -27,33 +32,33 @@ $search_request = md5($str); // Check the search string for type of search if (preg_match("/^from:/i", $str)) { list(,$srch) = explode(":", $str); - $search = $IMAP->search($mbox, "FROM" ,trim($srch)); + $search = $IMAP->search($mbox, "HEADER FROM" ,trim($srch), $imap_charset); finish_search($mbox, $search); } else if (preg_match("/^to:/i", $str)) { list(,$srch) = explode(":", $str); - $search = $IMAP->search($mbox, "TO", trim($srch)); + $search = $IMAP->search($mbox, "HEADER TO", trim($srch), $imap_charset); finish_search($mbox, $search); } else if (preg_match("/^cc:/i", $str)) { list(,$srch) = explode(":", $str); - $search = $IMAP->search($mbox, "CC", trim($srch)); + $search = $IMAP->search($mbox, "HEADER CC", trim($srch), $imap_charset); finish_search($mbox, $search); } else if (preg_match("/^subject:/i", $str)) { list(,$srch) = explode(":", $str); - $search = $IMAP->search($mbox, "SUBJECT", trim($srch)); + $search = $IMAP->search($mbox, "HEADER SUBJECT", trim($srch), $imap_charset); finish_search($mbox, $search); } else if (preg_match("/^body:/i", $str)) { list(,$srch) = explode(":", $str); - $search = $IMAP->search($mbox, "TEXT", trim($srch)); + $search = $IMAP->search($mbox, "TEXT", trim($srch), $imap_charset); finish_search($mbox, $search); } // search in subject and sender by default else { - $search = $IMAP->search($mbox, "SUBJECT", trim($str)); - $search2 = $IMAP->search($mbox, "FROM", trim($str)); + $search = $IMAP->search($mbox, "HEADER SUBJECT", trim($str), $imap_charset); + $search2 = $IMAP->search($mbox, "HEADER FROM", trim($str), $imap_charset); finish_search($mbox, array_unique(array_merge($search, $search2))); } |
