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