file_get_contents()分解UTF-8字符

我从外部服务器加载HTML。 HTML标记具有UTF-8编码,包含字符如ľ,,,č,,,etc.等等。当我用如下的file_get_contents()加载HTML时:

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

这最后工作完美!!!!!!

解决scheme在file_get_contents的PHP手册条目的注释中提出

 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改变编码?

我认为你只需要在这里字符types的双重转换: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); 

İn土耳其语,mb_convert_encoding或任何其他字符集转换不起作用。

而urlencode也没有工作,因为空间字符转换为+字符。 编码百分比必须是%20。

这一个工作!

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