73

外部サーバーから HTML をロードしています。HTML マークアップには UTF-8 エンコーディングがあり、ľ、š、č、ť、ž などの文字が含まれています。次のように file_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>
4

11 に答える 11

114

ポーランド語でも同様の問題がありました

私は試した:

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

これは最後に完全に機能しました!!!!!!

于 2013-03-03T08:20:40.583 に答える
86

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で運試しをすることもできます

于 2010-02-10T12:26:46.490 に答える
6

大丈夫。file_get_contents() がこの問題を引き起こしていないことがわかりました。私が別の質問で話している別の理由があります。愚かな私。

この質問を参照してください: DOM がエンコーディングを変更するのはなぜですか?

于 2010-02-10T13:05:31.487 に答える
5

私はあなたが単にそこで文字型の二重変換をしていると思います: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、他の問題が発生する可能性があります。

于 2012-11-10T18:59:00.633 に答える
2

これもやってみる

 $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);
于 2014-11-19T13:55:28.563 に答える
0

私は同様の問題を抱えていましたが、それを解決したのはhtml_entity_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_convert_encodingましたが、これはうまくいきませんでした。

于 2019-10-18T01:42:25.710 に答える
0

私は35000行のデータを扱っています。

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

このコードは、奇妙な文字を通常の文字に変換します。

于 2017-11-15T10:49:54.870 に答える