這個讓我很生氣。我試圖從Lucene中獲取搜索結果,但它不會表現出來。這是我在做什麼:Php Zend的Lucene熒光筆和unicode
$userQuery = Zend_Search_Lucene_Search_QueryParser::parse($_GET['query'], 'utf-8');
$search->results = $this->index->find($userQuery);
然後我檢索命中,並在每次打我試圖突出匹配。
$html = $query->highlightMatches($hit->body, 'utf-8');
我尋找「attività」:它會找到正確的命中,但它不會強調任何東西,它會輸出完整的文本,用正確的口音在一起(讓我看到了「attività」字不亮)。
如果我忽略了highlightMatches中的'utf-8'參數,它會突出顯示attività單詞,但是「à」字符會從輸出中截斷,所以它會顯示「attivit」。這種情況下的輸出字符串是ASCII編碼的。
這是什麼錯誤!我的頁面是utf-8編碼的。我用以下邏輯添加文檔:
// Following two lines are at the initialization so they hold for all code
Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('UTF-8');
Zend_Search_Lucene_Analysis_Analyzer::setDefault(
new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive()
);
...
$doc->addField(Zend_Search_Lucene_Field::Text($fieldName, $fieldValue, "UTF-8"));
...
任何幫助非常感謝!
看看這個,它可能有幫助:http://mariobrandt.de/archives/php/zend-framework-lucene-utf-8-problem-313/ – Haroon
這是我的出發點。但是這些字符串在索引中正確編碼。他們得到了熒光筆的證實! – Palantir