Я пытаюсь получить местный прогноз погоды на основе IP-адреса пользователя.
Я использую геоплугирование для определения местоположения пользователя и ввода имени города и страны в API погоды Google.
<code>//Get user IP
$ip = $_SERVER['REMOTE_ADDR'];
$geolocation = unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip='.$ip));
$geo_city = $geolocation['geoplugin_city'];
$geo_country = $geolocation['geoplugin_countryName'];
$file = "http://www.google.com/ig/api?weather=".$geo_city.",".$geo_country;
$xml = simplexml_load_file($file);
//Echo content of retrieved XML for debugging purposes
echo "<pre>";
print_r($xml);
echo "
";
Это работает хорошо в большинстве случаев, но когда я пробую это на своем собственном IP, я получаю Søborg, Дания (что не на 100% точно, но достаточно близко), и это дает мне почти пустой ответ от API погоды.
Главный подозреваемый в этом деле - подлый символ "ø".
XML-файл, который мне нужен, можно увидеть здесь: http://www.google.com/ig/api?weather=S%C3%B8borg,Denmark
XML, который я получаю, можно увидеть здесь: http://www.google.com/ig/api?weather=S
Когда я набираю этот URL в браузере, он работает нормально:
http://www.google.com/ig/api?weather=Søborg,Denmark
Когда я использую эту версию, она также работает (в браузере):
http://www.google.com/ig/api?weather=S%C3%B8borg,Denmark
но эта версия возвращает прогноз для Borg, Syddanmark:
http://www.google.com/ig/api?weather=S%26oslash%3Bborg,Denmark
Ничто из вышеперечисленного не возвращает желаемый результат при подаче в simplexml_load_file ().
Как уже говорилось, я подозреваю, что это проблема набора символов, но я не могу понять, что с этим делать.
Как правильно ее решить?
Я знаю, что вместо этого я могу использовать широту и долготу в качестве параметров для Google Weather API, но это только обходит проблему, а не решает ее.