外部サーバーから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>
わかった。 file_get_contents()がこの問題を引き起こしていないことがわかりました。別の理由で、別の質問で説明します。愚かな私。
この質問を参照してください: なぜDOMはエンコードを変更するのですか?
ポーランド語で同様の問題がありました
私は試した:
$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 で運試しをすることもできます
私はあなたが単に文字タイプの二重変換を持っていると思う: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またはその他の文字セット変換は機能しませんでした。
また、スペース文字が+ charに変換されたため、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;
}
このコードは、私の奇妙な文字を通常に変換します。