simplexml_load_file с символом & (амперсанд) в url с Solr

Я использую 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, и поэтому запрос терпит неудачу.

Solutions Collecting From Web of "simplexml_load_file с символом & (амперсанд) в url с Solr"

Попробуйте: 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"; 

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