file_get_contents () rompe los caracteres UTF-8

Estoy cargando un HTML de un servidor externo. El marcado HTML tiene encoding UTF-8 y contiene caracteres como ľ, š, è, ť, ž, etc. Cuando cargo el HTML con file_get_contents () de esta manera:

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

Desordena los caracteres UTF-8 y carga Å, ¾, ¤ y tonterías similares en lugar de los caracteres UTF-8 correctos.

¿Como puedo resolver esto?

ACTUALIZAR:

Intenté guardar el HTML en un archivo y enviarlo con encoding UTF-8. Ambos no funcionan, por lo que significa que file_get_contents () ya está devolviendo HTML roto.

ACTUALIZACIÓN2:

       Test      

Tuve un problema similar con el idioma polaco

Lo intenté:

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

Lo intenté:

 $fileEndEnd = utf8_encode ( $fileEndEnd ); 

Lo intenté:

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

Y entonces –

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

Esto último funcionó perfectamente !!!!!!

Solución sugerida en los comentarios de la entrada manual de PHP para 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)); } 

También puede probar suerte con http://php.net/manual/en/function.mb-internal-encoding.php

Bien. Descubrí que file_get_contents () no está causando este problema. Hay una razón diferente de la que hablo en otra pregunta. Tonto de mí.

Vea esta pregunta: ¿Por qué DOM cambia la encoding?

Creo que simplemente tiene una doble conversión del tipo de personaje allí: D

Puede ser porque usted abrió un documento html dentro de un documento html. Así que tienes algo que se ve así al final

          Test....... 

El uso de mb_detect_encoding por lo tanto puede llevarlo a otros problemas.

Prueba esto también

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

En idioma turco, mb_convert_encoding o cualquier otra conversión de juego de caracteres no funcionaba.

Y también urlencode no funcionó debido a espacio char convertido a + char. Debe ser% 20 para la encoding porcentual.

¡Este funcionó!

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

Estoy trabajando con 35000 líneas de datos.

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

Este código convierte mis extraños personajes en normales.