Поврежденная кодировка UTF-8 при чтении фида / оповещения Google

Всякий раз, когда я пытаюсь прочитать оповещение Google через PHP, используя что-то вроде:

$feed = file_get_contents("http://www.google.com/alerts/feeds/01445174399729103044/950192755411504138"); 

Независимо от того, сохраняю ли файл $feed в файле или echo результат на выходе, все символы unicode utf-8 ( т. Е. С диакритикой) представлены белым пространством. Я пробовал – без успеха – различные комбинации:

  • utf8_encode
  • utf8_decode
  • iconv
  • mb_convert_encoding

Я думаю, что неправильные символы пришли из потока, но я потерялся, потому что, если я попробую этот URI в браузере, тогда все будет в порядке. Может ли кто-нибудь пролить свет на этот вопрос?

Related of "Поврежденная кодировка UTF-8 при чтении фида / оповещения Google"

Извините, вы абсолютно правы – происходит что-то неприятное! Хотя это не то, что вы сначала подозреваете … Для справки, учитывая, что:

 echo mb_detect_encoding($feed); // prints: ASCII 

Данные Юникода теряются до того, как он будет отправлен удаленным сервером – похоже, Google ищет строку user-agent в заголовке запроса, которая по умолчанию отсутствует в user-agent file_get_contents без контекста stream.

Поскольку он не может идентифицировать клиента, делающего запрос по умолчанию, и принудительно кодирует ASCII . Это, по-видимому, необходимый резерв в случае какого-то катаклизма. [нужна цитата…]

Однако недостаточно назвать ваше приложение, но вам нужно включить известного поставщика. Я не уверен в полной мере этого, но я считаю, что большинство людей включают «Mozilla [версия] » для решения этой проблемы, например:

 $url = 'http://www.google.com/...'; $feed = file_get_contents($url, false, stream_context_create([ 'http' => [ 'method' => 'GET', 'header' => 'Accept-Charset: UTF-8' ."\r\n" .'User-Agent: (Mozilla/5.0 compatible) MyFeedReader/1.0' ] ])); file_put_contents('test.txt', $feed); // should now work as expected