Проблема с кодировкой php: file_get_contents

Моя задача проста: сделайте почтовый запрос на translate.google.com и получите перевод. В следующем примере я использую слово «hello» для перевода на русский язык.

header('Content-Type: text/plain; charset=utf-8'); // optional error_reporting(E_ALL | E_STRICT); $context = stream_context_create(array( 'http' => array( 'method' => 'POST', 'header' => implode("\r\n", array( 'Content-type: application/x-www-form-urlencoded', 'Accept-Language: en-us,en;q=0.5', // optional 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7' // optional )), 'content' => http_build_query(array( 'prev' => '_t', 'hl' => 'en', 'ie' => 'UTF-8', 'text' => 'hello', 'sl' => 'en', 'tl' => 'ru' )) ) )); $page = file_get_contents('http://translate.google.com/translate_t', false, $context); require '../simplehtmldom/simple_html_dom.php'; $dom = str_get_html($page); $translation = $dom->find('#result_box', 0)->plaintext; echo $translation; 

Линии, помеченные как необязательные, – это те, без которых вывод одинаковый. Но я получаю странные персонажи …

        

Я пытался

 echo mb_convert_encoding($translation, 'UTF-8'); 

Но я получаю

 ÐÒÉ×ÅÔ 

Кто-нибудь знает, как решить эту проблему?

ОБНОВИТЬ:

  1. Забыл упомянуть, что все мои php-файлы закодированы в UTF-8 без спецификации
  2. Когда я меняю «на» язык на «en», это перевод с английского на английский, он работает нормально.
  3. Я не думаю, что библиотека, которую я использую, испортила, потому что я попытался вывести всю страницу $, не передавая ее библиотечным функциям.
  4. Я использую PHP 5

Во-первых, ваш браузер установлен в UTF-8? В Firefox вы можете установить текстовую кодировку в режиме просмотра -> Кодировка символов. Убедитесь, что вы выбрали «Unicode (UTF-8)». Я бы также установил View-> Character Encoding-> Auto-Detect на «Universal».

Во-вторых, вы можете попробовать передать флаг FILE_TEXT, например:

 $page = file_get_contents('http://translate.google.com/translate_t', FILE_TEXT, $context); 

Попытайтесь увидеть этот пост, если он может помочь проблеме кодирования символов импорта CURL

Также вы можете попробовать этот фрагмент (взятый из php.net)

 <?php function file_get_contents_utf8($fn) { $content = file_get_contents($fn); return mb_convert_encoding($content, 'UTF-8', mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true)); } ?> 

Accept-Charset на самом деле не является обязательным. Здесь вы должны указать UTF8. Российские символы недействительны в ISO_8859-1