2011-02-07 4 views
1

Я пытаюсь получить тайских символов с веб-сайта. Я пробовал: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() ... Я чувствую, как я пытался все комбинаций этого материала и успеха.

ответ

2

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

Content-Language: th 

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

** UPDATE **

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

$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. См. here для более подробной информации. Хотя вы все равно можете иметь 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 
+0

Ok, я вынул ISO и сохранил часть UTF-8 и добавил, что заголовок и поместить его в: – Samir

+0

Вау, я не знаю, как использовать комментарии ... Я получил это: $ rawChapter = file_get_contents ("http://thaipope.org/webbible/01_002.htm", false, $ context); и он вернулся: Ѻ˹ á Ф © Ѻ – Samir

+1

Да, вы получили свою строку в порядке. Проблема, которую вы видите, в том, что ваша строка в порядке (содержит тайские символы), но вы эхо ее используете с помощью ISO-8859-1. Если ваш вывод HTML, используйте 'header ('Content-type: text/html; charset = utf-8');' Если ваш вывод является открытым текстом, используйте 'header ('Content-type: text/plain; charset = utf-8 '); ' –

Смежные вопросы