simplexml_load_file с & (амперсанд) в URL с Solr - PullRequest
1 голос
/ 18 октября 2011

Я использую 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>

Однако, когда я пытаюсь получить вышеуказанный URL, используя simplexml_load_file, вот так:

$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 ]

2 голосов
/ 18 октября 2011

Try: 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 голос
/ 19 октября 2011

Не работает:

$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"));

Это работает для производителей с амперсандом в их названии.

Важно отметить, что если вы передавали значения с пробелами, теперь их нужно будет кодировать перед добавлением. Например:

Прежде чем я смог просто использовать это для моей вставки сортировки:

$sort_insert = "&sort=price desc";

Теперь мне нужно urlencode просто "price desc". Когда я попытался urlencode всей строки sort_insert, запрос simplexml завершился неудачей.

После (работы):

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

Еще раз спасибо ... Вернуться к проекту!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...