Странные символы в XML-ответе из-за ошибки Google Weather API

Я только что запустил небольшое приложение, над которым работал. Ничего серьезного, но что-то, что я хотел бы получить должным образом работает. Он находится по адресу www.wedrapp.com.

Большую часть времени он работает отлично. Введите город, XML будет возвращен, проанализирован, и возвращенные данные будут показаны пользователю.

Однако, к сожалению, при поиске в определенных городах, таких как Марсель, возвращается ошибка. Если вы поищите в Марселе, вы поймете, что я имею в виду. У меня такое ощущение, что это связано со специальными символами, поскольку поиск в Марселе фактически возвращает Марсель, Прованс-Альпы-Лазурный берег в XML. Точно так же Париж выдает ошибку, поскольку фактически возвращает Париж, Иль-де-Франс.

Может ли кто-нибудь пролить свет на то, как убрать эти странные символы или, по крайней мере, не дать им выдать ошибку перед тем, как попасть на экран? Это XML, проанализированный с помощью PHP.


person cian1991ferrari    schedule 18.11.2011    source источник
comment
Похоже, мне нужно найти способ проанализировать ответ XML в кодировке, отличной от UTF-8, как указано здесь: stackoverflow.com/questions/5964214/. Может ли кто-нибудь сказать мне, как разобрать его с правильной кодировкой?   -  person cian1991ferrari    schedule 18.11.2011
comment
Прекрасный интерфейс у вас есть, кстати.   -  person Levi Morrison    schedule 18.11.2011


Ответы (1)


Узнайте, в какой кодировке находится XML, возвращаемый Google. Затем перекодируйте его из этой кодировки в UTF-8, после чего вы сможете загрузить XML с помощью SimpleXML.

XML API Google Weather API имеет кодировку, основанную на языке, указанном при запросе (можно также указать кодировку, которую вы хотите иметь, я скоро к этому приду).

Например, это может быть ISO-8859-2 связанный вопрос PHP XML — Google Weather API — анализ и изменение данных (язык, UTF-8 и F по Цельсию) показывает.

Вы можете узнать, какой именно, заглянув в заголовок HTTP-ответа Content-Type:

Content-Type: text/xml; charset=ISO-8859-1

Вы использовали utf8_encodeДокументы для изменения кодировки, это преобразует закодированную строку ISO-8859-1 (также называемую Latin-1) в UTF-8. Похоже, что стандартные запросы к секретному API Google Weather возвращают это по умолчанию.

Вы можете указать желаемую кодировку, добавив в запрос параметр oe. Например, чтобы получить его напрямую как UTF-8:

http://www.google.com/ig/api?weather=Mountain+View&oe=utf-8
                                                   ^

Это гарантирует, что вы всегда будете получать конкретную кодировку вместо того, чтобы угадывать или анализировать заголовки ответа.

person hakre    schedule 18.11.2011
comment
Спасибо, Хакре, только что использовал функцию utf8_encode() для перекодировки в UTF-8. Теперь показывает отлично! :D - person cian1991ferrari; 21.11.2011
comment
@ cian1991ferrari: я расширил ответ, который объясняет, почему и как вы можете получить ответ, закодированный как UTF-8. - person hakre; 21.11.2011
comment
этот oe param = 'utf-8' работает как шарм. большое спасибо! - person Pierre Valade; 08.03.2012