file_get_contents не работает с utf8

Я пытаюсь получить тайских персонажей с веб-сайта. Я пробовал:

$rawChapter = file_get_contents("URL"); $rawChapter = mb_convert_encoding($rawChapter, 'UTF-8', mb_detect_encoding($rawChapter, 'UTF-8, ISO-8859-1', true)); 

Когда я это делаю, персонажи возвращаются, как:

¡ÅѺ˹éÒáá¾ÃФÑÁÀÕÃìÀÒÉÒä ·  © ºÑº

Но если я возьму источник страницы, которую я пытаюсь загрузить и сохранить в свой собственный .htm-файл на моем локальном хосте в виде файла utf8, он правильно загрузит тайских символов. Только когда я пытаюсь загрузить его с сайта напрямую, он ломается.

Как я могу это исправить? В чем может быть проблема?

Я также попытался добавить этот контекст:

 $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', 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7' )) ) )); 

Я попытался добавить его в одиночку, я попытался добавить его с помощью mb_convert_encoding () … Я чувствую, что я пробовал все комбинации этого материала и не имел успеха.

Измените свою Accept-Charset на UTF-8 потому что ISO-8859-1 не поддерживает тайские символы. Если вы используете PHP-скрипт на компьютере Windows, вы также можете использовать кодировку windows-874 , и вы также можете попробовать добавить этот заголовок:

 Content-Language: th 

Но в большинстве случаев UTF-8 будет обрабатывать почти все символы или наборы символов без какой-либо другой декларации.

** ОБНОВЛЕНИЕ **

Очень странно, но это работает для меня.

 $opts = array( 'http'=>array( 'method'=>"GET", 'header'=> implode("\r\n", array( 'Content-type: text/plain; charset=TIS-620' //'Content-type: text/plain; charset=windows-874' // same thing )) ) ); $context = stream_context_create($opts); //$fp = fopen('http://thaipope.org/webbible/01_002.htm', 'rb', false, $context); //$contents = stream_get_contents($fp); //fclose($fp); $contents = file_get_contents("http://thaipope.org/webbible/01_002.htm",false, $context); header('Content-type: text/html; charset=TIS-620'); //header('Content-type: text/html; charset=windows-874'); // same thing echo $contents; 

Видимо, я ошибался в этом вопросе о UTF-8. Подробнее см. Здесь . Хотя у вас все еще есть выход UTF-8:

 $in_charset = 'TIS-620'; // == 'windows-874' $out_charset = 'utf-8'; $opts = array( 'http'=>array( 'method'=>"GET", 'header'=> implode("\r\n", array( 'Content-type: text/plain; charset=' . $in_charset )) ) ); $context = stream_context_create($opts); $contents = file_get_contents("http://thaipope.org/webbible/01_002.htm",false, $context); if ($in_charset != $out_charset) { $contents = iconv($in_charset, $out_charset, $contents); } header('Content-type: text/html; charset=' . $out_charset); echo $contents; // output in UTF-8