simplexml_load_file with& (&符号)在与Solr的网址中

时间:2011-10-18 11:25:50

标签: php solr simplexml ampersand

我正在使用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,因此查询失败。

2 个答案:

答案 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";

再次感谢...回到项目中!