Я использую 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, и поэтому запрос терпит неудачу.
Попробуйте: 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
Не работает:
$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"));
Это работает для производителей с амперсандом в их имени.
Важно отметить, что если вы передавали значения с пробелами, они должны теперь быть привязаны к urlencoded перед добавлением. Например:
Прежде чем я мог просто использовать это для моей сортировки:
$sort_insert = "&sort=price desc";
Теперь мне нужно, чтобы urlencode просто «цена desc». Когда я попытался ввести urlencode всю строку sort_insert, запрос simplexml завершится с ошибкой.
После (работ):
$sort = urlencode("price desc"); $sort_insert = "&sort=$sort";
Еще раз спасибо … Вернуться к проекту!