要了解的事项:
<?xml version='1.0' encoding='utf-8'?>
情况:
当我使用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()但却无法解码呢?
任何人都可以帮忙解决这个问题吗?
提前谢谢。
致以最诚挚的问候,
马塞洛
答案 0 :(得分:1)
正如您所说,您使用的是Windows-1252作为编码,并且提交的数据位于Windows-1252中。在查询或将其插入Solr之前,您必须将其转换为UTF-8(通过iconv,例如:iconv("cp1252", "utf-8", $text)
)。
源文件的编码不会影响应用程序中数据的编码,除非您在与Solr接口时使用UTF-8,否则您将遇到问题到处都是。在提交和查询Solr时将其转换为UTF-8,并在需要时返回到您的应用程序时将其转换回cp1252。