Solr 4.10.2编码

时间:2014-11-20 15:13:09

标签: solr

要了解的事项:

  • 我在Tomcat 8本地使用Solr 4.10.2
  • 我在Netbeans IDE中的设置是:编码: windows-1252 | PHP: 5.3(需要这样)
  • 我在Windows 7 x64中使用xampp 1.7.7
  • 来自Tomcat的我的server.xml文件以<?xml version='1.0' encoding='utf-8'?>
  • 开头
  • 来自Tomcat的我的server.xml文件在连接器标记中有这个URIEncoding =“UTF-8”
  • 我的php SolrPhpClient文件以UTF-8编码,没有BOM

情况:

当我使用Solr在我的网络应用程序中搜索时,如果我搜索Diário这个词,Solr Url调用的是:

ħ**号码://本地主机:8080 / solr的/选择排序=得分+降序&安培; FQ =%28searchfield%3A%28di%E1rio%29 + OR + ISBN%3A%28di%E1rio%29%29&安培;重量= JSON&安培; json.nl =映射&安培; q =%28searchfield%3A%28di%E1rio%29 + OR + ISBN%3A%28di%E1rio%29 + OR + TITULO%3A%28di%E1rio%29 + OR +作者日期%3A%28di%E1rio%29 + OR + editoraid%3A1%5E0.00001 + OR + editoraid%3A2%5E0.00001 + OR + editoraid%3A133%5E0.00001 + VAL %3A %22ord%28ano%29%22%29 + AND +状态%3A%28active%29&安培;开始= 0&安培;行= 10

如果我使用urldecode(),我会得到:

h ** p:// localhost:8080 / solr / select?sort = score desc&amp; fq =(searchfield:(diário)OR isbn:(diário))&amp; wt = json&amp; json.nl = map&amp; q =(搜索字段:(diário)或isbn:(diário)或titulo:(diário)或autor:(diário)OR editoraid:1 ^ 0.00001 OR editoraid:2 ^ 0.00001 OR editoraid:133 ^ 0.00001 val :“ord(ano)”)AND状态:(有效)&amp; start = 0&amp; rows = 10

问题:

当然,问题在于Diário字。

我已尝试直接在我的浏览器上插入这两个查询:

第一个给我一个错误: HTTP状态400 - {msg = URLDecoder:在查询字符串/表单数据的位置18之后检测到无效的字符编码(在解析为UTF-8时),代码= 400}

如果我使用第二个,它就像一个魅力!

我已经看过,使用mb_detect_encoding()函数,据说我发送了所有utf-8编码。

为什么SolrPhpClient使用类似urlencode()但却无法解码呢?

任何人都可以帮忙解决这个问题吗?

提前谢谢。

致以最诚挚的问候,

马塞洛

1 个答案:

答案 0 :(得分:1)

正如您所说,您使用的是Windows-1252作为编码,并且提交的数据位于Windows-1252中。在查询或将其插入Solr之前,您必须将其转换为UTF-8(通过iconv,例如:iconv("cp1252", "utf-8", $text))。

源文件的编码不会影响应用程序中数据的编码,除非您在与Solr接口时使用UTF-8,否则您将遇到问题到处都是。在提交和查询Solr时将其转换为UTF-8,并在需要时返回到您的应用程序时将其转换回cp1252。