我正在使用Solr,并且我的浏览器可以使用以下查询:
http://www.someipaddress.com:8983/solr/select?q=*&fq=shopid:40&start=0&rows=18&fq=manufacturer:"Bausch+%26+Lomb"
在返回xml的一部分中,我看到:
<str>manufacturer:"Bausch & Lomb"</str>
但是当我尝试使用simplexml_load_file来获取上面的url时:
$xml = simplexml_load_file("http://127.0.0.1:8983/solr/select?q=*&fq=shopid:40&start=0&rows=18&fq=manufacturer:\"Bausch+%26+Lomb\"");
我没有得到任何结果,因为Solr正在传递看起来像这样的制造商字符串(来自print_r):
[str] => Array ( [0] => shopid:40 [1] => manufacturer:"Bausch+%26+Lomb" )
因此,当我通过浏览器进行查询时,我会在%26中传递,但它会在查询中正确处理它。但是当我使用simplexml_load_file时,它仍然是%26,因此查询失败。
答案 0 :(得分:2)
尝试:
simplexml_load_file(rawurlencode('http://127.0.0.1:8983/solr/select?q=*&fq=shopid:40&start=0&rows=18&fq=manufacturer:"Bausch' .urlencode('&'). 'Lomb"'))
请参阅有关file
参数的说明:http://php.net/manual/en/function.simplexml-load-file.php
答案 1 :(得分:1)
没有工作:
$url = 'http://127.0.0.1:8983/solr/select?q=*&fq=shopid:40&start=0&rows=18';
$url .= '&fq=manufacturer:"Bausch' .urlencode('&'). 'Lomb"';
simplexml_load_file(rawurlencode($url));
查询的制造商部分显示为:"Bausch&Lomb"
;
没有工作:
simplexml_load_file(rawurlencode('http://127.0.0.1:8983/solr/select?q=*&fq=shopid:40&start=0&rows=18&fq=manufacturer:"Bausch ' .urlencode('&'). ' Lomb"'))
在Bausch and Lomb旁边添加空格会产生simplexml_load文件错误。
曾为:
simplexml_load_file(rawurlencode('http://127.0.0.1:8983/solr/select?q=*&fq=shopid:40&start=0&rows=18&fq=manufacturer:"Bausch+' .urlencode('&'). '+Lomb"'))
交换空间+作品!
这就是我最终动态地做到的。
$manufacturer = urlencode("Bausch & Lomb");
$manufacturer_insert = "&fq=manufacturer:\"$manufacturer\"";
$xml = simplexml_load_file(rawurlencode("http://127.0.0.1:8983/solr/select?q=$shopid_insert$start_insert$rows_insert$sort_insert$manufacturer_insert"));
适用于名称中带有&符号的制造商。
重要的是要注意,如果您使用空格传递值,则现在需要在添加之前对其进行urlencoded。例如:
在我可以将它用于我的排序插入之前:
$sort_insert = "&sort=price desc";
现在我需要urlencode只是&#34;价格desc&#34;。当我尝试对整个sort_insert字符串进行urlencode时,simplexml查询将失败。
之后(工作):
$sort = urlencode("price desc");
$sort_insert = "&sort=$sort";
再次感谢...回到项目中!