Php file_get_contents()分解UTF-8字符

Php file_get_contents()分解UTF-8字符,php,utf-8,file-get-contents,Php,Utf 8,File Get Contents,我正在从外部服务器加载HTML。HTML标记采用UTF-8编码,包含ľ、š、č、ť、ž等字符。当我用文件_get_contents()加载HTML时,如下所示: $html = file_get_contents('http://example.com/foreign.html'); 它弄乱了UTF-8字符,并加载Å、¾、·和类似的废话,而不是正确的UTF-8字符 我怎样才能解决这个问题 更新: 我尝试将HTML保存到一个文件中,并用UTF-8编码输出它。这两种方法都不起作用,因此这意味着fi

我正在从外部服务器加载HTML。HTML标记采用UTF-8编码,包含ľ、š、č、ť、ž等字符。当我用文件_get_contents()加载HTML时,如下所示:

$html = file_get_contents('http://example.com/foreign.html');
它弄乱了UTF-8字符,并加载Å、¾、·和类似的废话,而不是正确的UTF-8字符

我怎样才能解决这个问题

更新:

我尝试将HTML保存到一个文件中,并用UTF-8编码输出它。这两种方法都不起作用,因此这意味着file_get_contents()已返回损坏的HTML

更新2:

<!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>

试验


你也可以试试你的运气。我发现文件\u get\u contents()并没有导致此问题。我在另一个问题中谈到了另一个原因。我真傻


请看这个问题:

我认为这里的字符类型有双重转换: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\u detect\u编码可能会导致其他问题。

我对波兰语也有类似的问题

我试过:

$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, '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, '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");
这个最后一个工作得很好

也试试这个

 $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_编码或任何其他字符集转换都不起作用

而且,由于空格字符转换为+字符,urlencode也无法工作。百分比编码必须为%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;
}
此代码将我的奇怪字符转换为普通字符。

示例:

$string = file_get_contents(".../File.txt");
$string = mb_convert_encoding($string, 'UTF-8', "ISO-8859-1");
echo $string;

我有一个类似的问题,解决它的是
html\u entity\u decode

我的代码是:

$content = file_get_contents("http://example.com/fr");
$x = new SimpleXMLElement($content);
foreach($x->channel->item as $entry) {
    $subEntry = html_entity_decode($entry->description);
}
在这里,我正在检索一个xml文件(法语),这就是为什么我要使用这个$x对象变量。然后我把它解码成这个变量
$subEntry

我尝试了
mb\u convert\u编码
,但这对我不起作用

试试这个功能

function mb_html_entity_decode($string) {
if (extension_loaded('mbstring') === true)
{
    mb_language('Neutral');
    mb_internal_encoding('UTF-8');
    mb_detect_order(array('UTF-8', 'ISO-8859-15', 'ISO-8859-1', 'ASCII'));

    return mb_convert_encoding($string, 'UTF-8', 'HTML-ENTITIES');
}

return html_entity_decode($string, ENT_COMPAT, 'UTF-8');

}

我使用下面的函数设法解决了这个问题:

function file_get_contents_utf8($url) {
    $content = file_get_contents($url);
    return mb_convert_encoding($content, "HTML-ENTITIES", "UTF-8");
}

file_get_contents_utf8($url);

您是否使用UTF-8输出它们?您在哪里查看加载的HTML?我不会输出它。我将它保存到一个文件中,然后读取它。但这并不重要,因为我试着用UTF-8输出它,结果还是一团糟。作为第二个例子,您需要将字符集传递给htmlentities:还有一个猜测,可能是远程服务器在元标记中说
UTF-8
,但在内容类型头中发送
iso-8859-1
?这应该被标记为最佳答案。谢谢戈登。简单,简单,完美。它给了我ă和ª的插入,而不是Ș:((对于所有德国人,使用iso-8859-1而不是UTF-8。这将为您修复äöüß。伟大的修复谢谢。这应该是答案!对我来说,file_get_contents()正在转换成unicode版本。在使用file_get_contents()之后使用mb_convertïu编码()解决了这个问题。谢谢!在工作了5个小时后,这个答案救了我一天的时间。…伟人thanksPerfect:
$fileEndEnd=mb\u convert\u编码($fileEndEnd,'HTML-ENTITIES','UTF-8”);
文件的get\u contents()导致了这个问题。我打开了一个JSON文件,其中包含文件的get\u contents(),但在打印时加载JSON后,unicode字符出现在JSON中,但没有出现在JSON中。对文件_get_contents()执行mb_convert_encoding()修复了该问题。
$string=mb_convert_encoding($string,'HTML-ENTITIES','UTF-8”);
为我解决了这个问题。这有什么不同?它工作得很好