Je charge un fichier HTML depuis un serveur externe. Le balisage HTML a un codage UTF-8 et contient des caractères tels que, š, č, ť, ž, etc. Quand je charge le code HTML avec file_get_contents () comme ceci:
$html = file_get_contents('http://example.com/foreign.html');
Il bousille les caractères UTF-8 et charge Å, ¾, ¤ et un non-sens similaire au lieu des caractères UTF-8 appropriés.
Comment puis-je résoudre ça?
METTRE À JOUR:
J'ai essayé à la fois de sauvegarder le code HTML dans un fichier et de le générer avec le codage UTF-8. Les deux ne fonctionnent pas, cela signifie donc que file_get_contents () renvoie déjà du code HTML cassé.
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>
Bien. J'ai découvert que la file_get_contents () ne cause pas ce problème. Il y a une autre raison dont je parle dans une autre question. Que je suis bête.
Voir cette question: Pourquoi DOM change-t-il le codage?
J'ai eu le même problème avec la langue polonaise
J'ai essayé:
$fileEndEnd = mb_convert_encoding($fileEndEnd, 'UTF-8', mb_detect_encoding($fileEndEnd, 'UTF-8', true));
J'ai essayé:
$fileEndEnd = utf8_encode ( $fileEndEnd );
J'ai essayé:
$fileEndEnd = iconv( "UTF-8", "UTF-8", $fileEndEnd );
Et alors -
$fileEndEnd = mb_convert_encoding($fileEndEnd, 'HTML-ENTITIES', "UTF-8");
Ce dernier a parfaitement fonctionné !!!!!!
Solution suggérée dans les commentaires de l'entrée de manuel PHP pour 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));
}
Vous pouvez également tenter votre chance avec http://php.net/manual/en/function.mb-internal-encoding.php
Je pense que vous avez simplement une double conversion du type de caractère: D
C'est peut-être parce que vous avez ouvert un document HTML dans un document HTML. Donc, vous avez quelque chose qui ressemble à ceci à la fin
<!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>.......
L'utilisation de mb_detect_encoding
peut donc vous mener à d'autres problèmes.
Essayez ceci aussi
$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 turc, mb_convert_encoding ou toute autre conversion de jeu de caractères ne fonctionnait pas.
De plus, urlencode ne fonctionnait pas à cause de la conversion de caractère dans + char. Il doit être% 20 pour l’encodage en pourcentage.
Celui-ci a fonctionné!
$url = rawurlencode($url);
$url = str_replace("%3A", ":", $url);
$url = str_replace("%2F", "/", $url);
$data = file_get_contents($url);
Je travaille avec 35000 lignes de données.
$f=fopen("veri1.txt","r");
$i=0;
while(!feof($f)){
$i++;
$line=mb_convert_encoding(fgets($f), 'HTML-ENTITIES', "UTF-8");
echo $line;
}
Ce code convertit mes étranges caractères en normal.