Zend_Search_Lucene: UTF-8 безумие
У меня проблемы с Zend_Search_Lucene и неанглийскими символами, такими как немецкий ÄÖÜ. Моя база данных возвращает строки в формате UTF-8, поэтому я подумал, что все будет работать нормально.
После серьезных проблем с кодированием я искал в Интернете и обнаружил, что следующие строки кода решают проблемы для большинства людей:
Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('utf-8');
Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive ()
На самом деле, это не решило мою проблему. Сегодня я нашел решение, которое работает: (не utf8_decode
)
$doc->addField(Zend_Search_Lucene_Field::keyword('division', utf8_decode($contact->division)), 'utf-8');
Ну, это работает отлично, но, честно говоря, выглядит довольно странно. Почему я должен конвертировать строки назад и вперед? Может я неправильно использую Lucene? Или это ошибка?
1 ответ
Запросы и хранение данных - это две разные вещи. Если ваш запрос закодирован в utf-8, то ваши данные (документ) также должны быть в кодировке utf-8, чтобы соответствовать запросу.
наконец
$doc->addField(Zend_Search_Lucene_Field::keyword('division', utf8_decode($contact->division)), 'utf-8');
должно быть
$doc->addField(Zend_Search_Lucene_Field::keyword('division',$contact->division, 'utf-8'));