Я пытаюсь получить тайских персонажей с веб-сайта. Я пробовал:
$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