Php 在Apache Solr中处理德国UMLAUT

Php 在Apache Solr中处理德国UMLAUT,php,apache,solr,Php,Apache,Solr,我对ApacheSolr是新手。我正在使用SolrPHP客户端在Solr和我的PHP web应用程序之间进行交互 我面临的问题是德国乌姆劳特人。每当我尝试搜索包含umlaut字符的字符串时,Solr都会抛出一个异常,如下所示: exception 'Apache_Solr_HttpTransportException' with message ''400' Status: Bad Request' in C:\SolrPhpClient\Apache\Solr\Service.php:338

我对ApacheSolr是新手。我正在使用SolrPHP客户端在Solr和我的PHP web应用程序之间进行交互

我面临的问题是德国乌姆劳特人。每当我尝试搜索包含umlaut字符的字符串时,Solr都会抛出一个异常,如下所示:

exception 'Apache_Solr_HttpTransportException' with message ''400' Status: Bad Request' 
in C:\SolrPhpClient\Apache\Solr\Service.php:338 
Stack trace: #0 C:\SolrPhpClient\Apache\Solr\Service.php(1170): 
Apache_Solr_Service->_sendRawGet('http://localhost...') #1 C:\Apache24\htdocs\MyProject\results.php(42):
Apache_Solr_Service->search('f?r', 0, 10) #2 {main}
如您所见,德语für显示为f?r

我试图用iconv和htmlentities来隐藏它,但它们返回false或empty

这是我的代码:

    $query = "für"; //string with German umlaut

try {
    //instantiate a Solr object
    $solr = new Apache_Solr_Service(SOLRHOST, SOLRPORT, SOLRNAME);

    // Check if Solr is running
    if (!$solr->ping()) {
        echo 'Solr service not responding!';
        exit;
    }

    // I have tried these functions
    // $query = iconv("UTF-8", "ISO-8859-15//TRANSLIT",$query);
    // $query = htmlentities($query,ENT_QUOTES,'UTF-8');

    //run the query
    $results = $solr->search($query, 0, 10); // exception occurs here

    $numDocs = $results->response->numFound;
    $docs = $results->response->docs;
    // Check if there are any results
    if (empty($numDocs) || $numDocs <= 0) {
        print_r($docs);
        echo "No records found!!";
    } else {
        echo ("No. of docs:".$numDocs."<br/>");
        print_r($docs);
        echo "records found!!";
    }

} catch (Exception $e) {
    $log->error($e->getMessage());
    echo($e->__toString());
}

如果您收到消息400,那么日志中的Solr端应该有一条真正的错误消息。看看上面说的,它应该为你指明正确的方向


另外,比较直接从管理UI搜索文本和从PHP代码搜索文本时生成的查询。您可以看到差异并确定故障所在。

是否可以添加完整的错误消息?在C中的错误请求之后,您可能已经切断了一个有趣的部分。嗨,切夫,我已经更新了上面的错误消息。嗨,亚历克斯,是的,我检查了,但是Solr没有显示任何错误。另外,在Solr管理中,我尝试查询相同的文本für,并得到了期望的结果。我只是在php端查询时出错。您在Solr端是否有任何信息表明您从php到Solr的整个过程中都得到了错误?如果不是的话,也许你是在打不同的东西。如果所有其他操作都失败,您可以运行Wireshark之类的程序,查看PHP在线路上实际写了什么,并将其与工作请求进行比较。但您需要指向与localhost不同的主机。例如example.com。或者使用Runscope.com,它会返回一个错误,但至少您会看到查询。