Я использую file_get_contents(), чтобы получить HTML и удалить некоторые данные с веб-сайта. Источник не всегда UTF8, но я использую класс FORCEUTF8 для его исправления. Однако это не работает. Что я делаю не так?
/* Load UTF8 HTML */
require_once('/ForceUTF8/Encoding.php');
use \ForceUTF8\Encoding;
function loadHTMLInUtf8($url){
$utf8_or_latin1_or_mixed_string=file_get_contents($url);
return Encoding::toUTF8($utf8_or_latin1_or_mixed_string);
}
$html=loadHTMLInUtf8('http://www.example.com/');
$dom->loadHTML('<meta http-equiv="content-type" content="text/html; charset=utf-8">'.$html);
Есть ли альтернативный способ сделать это?
Известно, что file_get_contents
уничтожает кодировку UTF8.
Попробуйте что-то вроде этого:
<?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));
}
?>
Если это не сработает, не могли бы вы привести пример URL-адреса, где это не работает? (Я проверил источник библиотеки FORCEUTF8, и это выглядит не очень эффективно, и я предполагаю, что эта небольшая функция может сделать то же самое (и она является родной в PHP-коде)).
Вы можете использовать метод utf8_encode. Он должен делать то же, что и описанный выше метод.