From 12dac4911b91e80cf1d8c85ee8ad1ef191b630cb Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Tue, 12 Apr 2011 14:01:49 -0400
Subject: [PATCH] Handle unicode strings when normalizing for search (#1487866)

---
 program/include/rcube_addressbook.php |   24 +++++++++++++++++-------
 1 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/program/include/rcube_addressbook.php b/program/include/rcube_addressbook.php
index 9e8254c..8ec0abb 100644
--- a/program/include/rcube_addressbook.php
+++ b/program/include/rcube_addressbook.php
@@ -397,14 +397,24 @@
      */
     protected static function normalize_string($str)
     {
-        $norm = strtolower(strtr(utf8_decode($str),
-            '��������������������������������������������������',
-            'ccaaaaeeeeiiiaeooouuuyooaiounnaaaaaeeeiiioooouuuyy'));
-
-        return preg_replace(
-            array('/[\s;\+\-\/]+/i', '/(\d)\s+(\d)/', '/\s\w{1,3}\s/'),
+        // split by words
+        $arr = explode(" ", preg_replace(
+            array('/[\s;\+\-\/]+/i', '/(\d)[-.\s]+(\d)/', '/\s\w{1,3}\s/'),
             array(' ', '\\1\\2', ' '),
-            $norm);
+            $str));
+        
+        foreach ($arr as $i => $part) {
+            if (utf8_encode(utf8_decode($part)) == $part) {  // is latin-1 ?
+                $arr[$i] = strtr(strtolower(strtr(utf8_decode($part),
+                    '��������������������������������������������������',
+                    'ccaaaaeeeeiiiaeooouuuyooaiounnaaaaaeeeiiioooouuuyy')),
+                    array('�' => 'ss', 'ae' => 'a', 'oe' => 'o', 'ue' => 'u'));
+            }
+            else
+                $arr[$i] = strtolower($part);
+        }
+        
+        return join(" ", $arr);
     }
     
 }

--
Gitblit v1.9.1