simplexml_load_file()
не загружает XML файл, когда URL-адрес содержит символ амперсанда. Я пробовал два примера с амперсандом и без него:
$source1 = simplexml_load_file("http://www.isws.illinois.edu/warm/data/outgoing/nbska/datastream.aspx?id=ncu");
print_r($source1); //works
$source2 = simplexml_load_file("http://forecast.weather.gov/MapClick.php?lat=38.8893&lon=-77.0494&unit=0&lg=english&FcstType=dwml");
print_r($source2); //no output
Первый пример хорошо работает, так как он не включает амперсанд, но второй пример не работает, так как включает амперсанд.
Я ссылался на simplexml_load_file с помощью & (амперсанд) в url с параметрами Solr и simplexml_load_file ampersand в url, но это не сработало.
Проблема заключается не в амперсанде в URL-адресе. Проблема заключается в том, что weather.gov, по-видимому, блокирует эти типы запросов. Они не позволят пользователям, у которых нет набора useragent.
Самый быстрый способ обойти это - установить UserAgent в PHP, который вы можете сделать, поставив этот код над вашим вызовом xml:
ini_set('user_agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0) Gecko/20100101 Firefox/9.0');
Однако я бы рекомендовал использовать CURL вместо simplexml_load_file, так как simplexml_load_file часто ограничивается конфигурацией сервера. Если бы вы сделали это с завитом, вы бы хотели сделать что-то вроде первого ответа здесь: SimpleXML user agent
Я проверил это локально и получил его, просто указав агент пользователя.
EDIT: Также, добро пожаловать в SO! Обязательно проголосуйте часто; D