1

私は 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 のままになるため、クエリは失敗します。

4

2 に答える 2

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

于 2011-10-18T12:03:10.133 に答える
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 と 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"));

これは、名前にアンパサンドが含まれるメーカーで機能します。

スペースを含む値を渡していた場合は、追加する前に urlencode する必要があることに注意してください。例えば:

これをソート挿入に使用する前に:

$sort_insert = "&sort=price desc";

ここで、「price desc」だけを urlencode する必要があります。sort_insert 文字列全体を urlencode しようとすると、simplexml クエリが失敗します。

後(作品):

$sort = urlencode("price desc");
$sort_insert = "&sort=$sort";

ありがとうございます... プロジェクトに戻りましょう!

于 2011-10-18T20:33:58.473 に答える