utf 8 — неправильная кодировка файлов Word, загруженных на мой сервер и обработанных PHP-скриптом

У меня есть простая функция (на самом деле не моя), которая открывает и читает файлы Word 97-2003 .doc:

function docToText ($arrayOfFileProperties)
{
$pathToFile = $arrayOfFileProperties[1];
$response   = '';
if(file_exists($pathToFile))
{
if(($fh = fopen($pathToFile, 'r')) !== false )
{
$headers = fread($fh, 0xA00);

$n1 = ( ord($headers[0x21C]) - 1 );
$n2 = ( ( ord($headers[0x21D]) - 8 ) * 256 );
$n3 = ( ( ord($headers[0x21E]) * 256 ) * 256 );
$n4 = ( ( ( ord($headers[0x21F]) * 256 ) * 256 ) * 256 );
$textLength = ($n1 + $n2 + $n3 + $n4);
$extracted_plaintext = fread($fh, $textLength);
return mb_convert_encoding($extracted_plaintext,'ISO-8859-5');
}
}

$pathToFile это свойство, содержащее загруженный файл .doc. Файл открывается fopen метод, а затем он получает fread-ed.

Когда люди загружают файлы, содержащие латиницу, результирующая строка абсолютно нормальная (UTF-8). Но у меня есть пользователи, которые могут время от времени загружать русские файлы .doc, и в этом случае я получаю бессмысленную строку, и разные порталы русского декодирования говорят мне, что это кодированный в кодировке UTF-8 текст. Я понимаю, что это потому, что PHP не знает кодировку загружаемых русских файлов, он просто использует кодировку UTF-8, чтобы просто дать мне хоть что-то. И, как вы можете видеть, я пытаюсь закодировать вывод в ISO-8859-5 (почему именно эта кодировка? См. Ниже).

Дело в том, что вы можете использовать https://www.artlebedev.ru/decoder/, например, чтобы попытаться определить кодировку вашего кириллического текста. Он успешно преобразует мой русский текст в кодировке UTF-8 в абсолютно читаемый русский ISO-8859-5, поэтому, естественно, я попытался использовать эту информацию о преобразовании, чтобы попытаться расшифровать вывод моей функции, чтобы я мог видеть Кириллический шрифт правильно. На самом деле безрезультатно.

ни mb_convert_encodingни iconv способны конвертировать мой бред в читаемый русский текст, даже если в качестве целевой кодировки я указываю «ISO-8859-5». Более того, насколько я вижу, даже не имеет значения, для какой целевой кодировки я ставлю mb_convert_encoding или же iconv методы — текст вообще не меняется. Я все еще получаю UTF-8 бред моего кириллического текста.

Есть ли способ манипулировать кодировками в моем случае? Дело в том, что у нас есть около 3 или 4 кодировки кириллицы, причем одна или две почти всегда имеют место.

Я что-то пропустил? Спасибо!

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector