file_get_contents () Разбивает символы UTF-8

Я загружаю HTML с внешнего сервера. HTML-разметка имеет кодировку UTF-8 и содержит символы, такие как ľ, š, č, ť, ž и т. Д. Когда я загружаю HTML с файлом_get_contents () следующим образом:

$html = file_get_contents('http://example.com/foreign.html'); 

Это испортит символы UTF-8 и загружает Å, ¾, ¤ и аналогичную ерунду вместо правильных символов UTF-8.

Как я могу это решить?

ОБНОВИТЬ:

Я попытался сохранить HTML в файл и вывести его с кодировкой UTF-8. Оба не работают, поэтому означает, что file_get_contents () уже возвращает неработающий HTML.

UPDATE2:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sk" lang="sk"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Language" content="sk" /> <title>Test</title> </head> <body> <?php $html = file_get_contents('http://example.com'); echo htmlentities($html); ?> </body> </html> 

У меня была аналогичная проблема с польским языком

Я пытался:

 $fileEndEnd = mb_convert_encoding($fileEndEnd, 'UTF-8', mb_detect_encoding($fileEndEnd, 'UTF-8', true)); 

Я пытался:

 $fileEndEnd = utf8_encode ( $fileEndEnd ); 

Я пытался:

 $fileEndEnd = iconv( "UTF-8", "UTF-8", $fileEndEnd ); 

А потом –

 $fileEndEnd = mb_convert_encoding($fileEndEnd, 'HTML-ENTITIES', "UTF-8"); 

Это последнее отлично работало !!!!!!

Решение, предложенное в комментариях к ручному вводу PHP для file_get_contents

 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)); } 

Вы также можете попробовать свое счастье с помощью http://php.net/manual/en/function.mb-internal-encoding.php

Хорошо. Я обнаружил, что file_get_contents () не вызывает этой проблемы. Есть другая причина, о которой я говорю в другом вопросе. Дурак я.

См. Этот вопрос: Почему DOM меняет кодировку?

Я думаю, что у вас просто есть двойное преобразование типа символа: D

Это может быть так, потому что вы открыли html-документ в html-документе. Итак, у вас есть что-то похожее на это в конце

 <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title></title> </head> <body> <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Test</title>....... 

Поэтому использование mb_detect_encoding может привести к другим проблемам.

Попробуйте это тоже

  $url = 'http://www.domain.com/'; $html = file_get_contents($url); //Change encoding to UTF-8 from ISO-8859-1 $html = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $html); 

На турецком языке mb_convert_encoding или любое другое преобразование кодировки не работало.

А также urlencode не работал из-за пробела, преобразованного в + char. Он должен составлять% 20 ​​для кодирования процентов.

Это сработало!

  $url = rawurlencode($url); $url = str_replace("%3A", ":", $url); $url = str_replace("%2F", "/", $url); $data = file_get_contents($url); 

Я работаю с 35000 строк данных.

 $f=fopen("veri1.txt","r"); $i=0; while(!feof($f)){ $i++; $line=mb_convert_encoding(fgets($f), 'HTML-ENTITIES', "UTF-8"); echo $line; } в $f=fopen("veri1.txt","r"); $i=0; while(!feof($f)){ $i++; $line=mb_convert_encoding(fgets($f), 'HTML-ENTITIES', "UTF-8"); echo $line; } 

Этот код превращает мои странные персонажи в нормальные.